문자 변환

문자 변환 (Character conversion)

Hollerith 상수처럼 문자 리터럴을 숫자 변수에 붙여 넣는 비표준 확장을 설명해요. -fdec-char-conversions 옵션으로 켤 수 있어요.

출처: Character conversion

본문

문자 리터럴을 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.

xinteger*4라 4바이트예요. data x / 'abcd' /는 정확히 4글자라 그대로 들어가요. x = 'A'는 1글자라 나머지 3바이트가 공백으로 채워지는(패딩되는) 경우고, x = 'ab1234'는 6글자라 4바이트에 맞게 잘리는(truncated) 경우예요. 주석의 Is padded.Is truncated.가 바로 이 두 상황을 가리켜요.

이 확장도 DEC 하위 호환용이므로, 새 코드에서는 쓰기보다는 명시적인 변환(TRANSFERICHAR 등의 내장 함수)을 쓰는 편이 좋아요.

한 가지 더 짚을 점은, 이 기능이 kind=1 문자 리터럴에만 적용된다는 거예요. 유니코드나 다른 캐릭터 셋(kind ≠ 1)의 리터럴에는 이 변환 규칙이 적용되지 않으니, 문자 데이터를 숫자 값으로 옮길 때는 그 점을 염두에 두어야 해요. Hollerith 상수처럼 바이트 단위 복사라는 점에서, 문자의 실제 바이트 값이 그대로 정수 변수에 들어간다고 이해하면 돼요.

더 알아보기

  • Hollerith 상수 지원
  • -fdec-char-conversions 옵션
  • 문자·숫자 변환 내장 함수