이 문제를 한번도 고민해 본적도, 문제가 되었던 적도 없습니다.
그런데 누가 물어보더군요.
그래서 인터넷을 뒤졌는데,
32라고 나온곳, 제한이 없다라는 곳.. 여러 답이 있더군요.
정확하게 C언어에서 가능한 변수명의 최대길이는 어떻게 되나요?
이럴 때 필요한 것이 표준이죠. -_-; ISO 9899(C99 표준)와 ISO 14882(C++98 표준)을 참고하시는 게 좋을 것입니다.
일단 기본적으로 C와 C++에서 변수명(정확하게는 identifier)의 길이에 제한이 없는 건 맞습니다:
Quote:
ISO 9899 sect 6.4.2.1 (2):
... There is no specific limit on the maximum length of an identifier. ISO 14882 sect 2.10 (1):
An identifier is an arbitrarily long sequence of letters and digits. ...
하지만 실제로 무한한 길이의 identifier라는 건 불가능하기 때문에, 어느 길이 이상만 지원하면 된다는 식의 가이드라인이 있습니다. C와 C++의 차이는 여기에서 나타납니다:
Quote:
ISO 9899 sect 4 (1):
In this International Standard, "shall" is to be interpreted as a requirement on an implementation or on a program; conversely, "shall not" is to be interpreted as a prohibition.
ISO 9899 sect 5.2.4:
... The following summarizes the language-related environmental limits on a conforming implementation; ...
ISO 9899 sect 5.2.4.1 (1):
The implementation shall be able to translate and execute at least one program that contains at least one instance of every one of the following limits:
...
-- 63 significant initial characters in an internal identifier or a macro name
-- 31 significant initial characters in an external identifier
...
즉 C는 적어도 63자 이하의 내부 이름(외부 이름은 31자)을 제대로 처리할 것을 강제합니다. (앞에서 shall의 의미를 설명한 것을 확인해 보세요) 반면에...
Quote:
ISO 14882 Annex B (2):
The limits may constrain quantities that include those described below or others. The bracketed number following each quantity is recommended as the minimum for that quantity. However, these quantities are only guidelines and do not determine compliance.
...
-- Number of initial characters in an internal identifier or macro name [1024].
-- Number of initial characters in an external identifier [1024].
...
C++는 1024자 이하의 내부/외부 이름을 제대로 처리할 것을 권장합니다. 여기서 권장이라는 것은 이 가이드라인을 안 지킨다고 표준에 어긋나는 구현이 되는 건 아니라는 뜻입니다. C와는 다르죠.
정리하면, "표준에서 길이에 제한을 두는 건 아니지만 31자 이상의 이름은 쓰는 걸 자제하는 게 좋다" 정도 될까요. :)
- 토끼군
덤: 당연한 소리지만, 제가 밑줄 친 부분은 표준에 강조된 부분이 아니라 제가 설명을 위해서 강조한 것일 뿐입니다.
Re: C언어에서 변수명의 최대 길이는 어떻게 되나요?
이럴 때 필요한 것이 표준이죠. -_-; ISO 9899(C99 표준)와 ISO 14882(C++98 표준)을 참고하시는 게 좋을 것입니다.
일단 기본적으로 C와 C++에서 변수명(정확하게는 identifier)의 길이에 제한이 없는 건 맞습니다:
하지만 실제로 무한한 길이의 identifier라는 건 불가능하기 때문에, 어느 길이 이상만 지원하면 된다는 식의 가이드라인이 있습니다. C와 C++의 차이는 여기에서 나타납니다:
즉 C는 적어도 63자 이하의 내부 이름(외부 이름은 31자)을 제대로 처리할 것을 강제합니다. (앞에서 shall의 의미를 설명한 것을 확인해 보세요) 반면에...
C++는 1024자 이하의 내부/외부 이름을 제대로 처리할 것을 권장합니다. 여기서 권장이라는 것은 이 가이드라인을 안 지킨다고 표준에 어긋나는 구현이 되는 건 아니라는 뜻입니다. C와는 다르죠.
정리하면, "표준에서 길이에 제한을 두는 건 아니지만 31자 이상의 이름은 쓰는 걸 자제하는 게 좋다" 정도 될까요. :)
- 토끼군
덤: 당연한 소리지만, 제가 밑줄 친 부분은 표준에 강조된 부분이 아니라 제가 설명을 위해서 강조한 것일 뿐입니다.
정말로 상세한 설명 감사드립니다.복받으실꺼예요... ^^;
정말로 상세한 설명 감사드립니다.
복받으실꺼예요... ^^;
c++의 경우 내부에서 1024정도를 처리하지 못하면, template을
c++의 경우 내부에서 1024정도를 처리하지 못하면, template을 처리하지 못하는 난감함이.. 있지요.
어떤 컴파일러는 경고를 내고, 프로그래머는 경고를 없애기 위해 pragma를 쓰지요
---
http://coolengineer.com
[quote="pynoos"]c++의 경우 내부에서 1024정도를 처리하
대표적으로 VC++ 6의 255자 제한... -_-
- 토끼군
댓글 달기