문자 변환
문자 변환 (Character conversion)
Hollerith 상수처럼 문자 리터럴을 숫자 변수에 붙여 넣는 비표준 확장을 설명해요. -fdec-char-conversions 옵션으로 켤 수 있어요.
본문
문자 리터럴을 Hollerith 상수와 비슷한 방식으로 쓰는 것은 비표준 확장이에요. 이 기능은 -fdec-char-conversions로 켜지고, kind=1인 문자 리터럴에만 적용돼요.
문자 리터럴은 숫자(INTEGER, REAL, COMPLEX) 또는 LOGICAL 변수를 쓰는 DATA 문과 대입문에서 사용할 수 있어요. Hollerith 상수처럼 바이트 단위로 복사돼요. 그리고 상수는 저장되는 변수의 크기에 맞춰 공백으로 패딩되거나 잘려나가요(truncate).
예시를 볼게요.
integer*4 x
data x / 'abcd' /
x = 'A' ! Is padded.
x = 'ab1234' ! Is truncated.
x는 integer*4라 4바이트예요. data x / 'abcd' /는 정확히 4글자라 그대로 들어가요. x = 'A'는 1글자라 나머지 3바이트가 공백으로 채워지는(패딩되는) 경우고, x = 'ab1234'는 6글자라 4바이트에 맞게 잘리는(truncated) 경우예요. 주석의 Is padded.와 Is truncated.가 바로 이 두 상황을 가리켜요.
이 확장도 DEC 하위 호환용이므로, 새 코드에서는 쓰기보다는 명시적인 변환(TRANSFER나 ICHAR 등의 내장 함수)을 쓰는 편이 좋아요.
한 가지 더 짚을 점은, 이 기능이 kind=1 문자 리터럴에만 적용된다는 거예요. 유니코드나 다른 캐릭터 셋(kind ≠ 1)의 리터럴에는 이 변환 규칙이 적용되지 않으니, 문자 데이터를 숫자 값으로 옮길 때는 그 점을 염두에 두어야 해요. Hollerith 상수처럼 바이트 단위 복사라는 점에서, 문자의 실제 바이트 값이 그대로 정수 변수에 들어간다고 이해하면 돼요.
더 알아보기
- Hollerith 상수 지원
- -fdec-char-conversions 옵션
- 문자·숫자 변환 내장 함수