2012-04-13 2 views
0

여기 책 (. K & R, 2 판, P 35)에서 직접 인용은 다음과 같습니다.내부 이름의 처음 31 자 또는 63 자 이상이 중요합니까?

내부 이름의 첫 31 개 문자가 중요 적어도

" 함수 이름 및 외부 변수의 경우, 외부 이름은 이상의 어셈블러 및 로더에서 사용할 수 있으므로 외부 이름의 경우 31보다 작을 수 있습니다. 외부 이름의 경우 표준 은 6 자 및 하나의 경우에 대해서만 보장됩니다. "

그리고 C99에는 내부 이름의 길이 제한이 없지만 첫 번째 63 개만 중요한 것으로 보장됩니다 (5.2.4.1 번역 제한). 이러한 제한은 특별히 31 또는 63 이유

내 질문은? 왜이 번호가 구체적일까요? 왜 19, 24 또는 다른 어떤 숫자? 구현상의 문제인 경우이를 만드는 데 도움이 될까요? 또는 ?

+5

아마 책 제목을 말하면 이해할 수 있습니다. – Steve

+1

음, 태그는 kr-c입니다. 그래서 나는 어둠 속에서 야생 찌르다가 K & R을 들여다 보았습니다. 놀랍게도 놀랍습니다. (35 페이지, 2 판) – BoBTFish

+2

컴퓨터는 2의 제곱으로 공급됩니다. 거기에서 나는 그것을 말했다. –

답변

8

언어 디자인위원회와 관련된 컴파일러/링커 작성자는 보통 툴 체인 구현 또는 함께 제공되는 바이너리 파일 형식 (예 : ELF, COFF 등)을 가정 할 수 있도록 몇 가지 제한을 부과합니다. 숫자 31과 63은 아마도 그들이 2 n -1이고 어떤 프로그래머가 2 n과 같은 이유로 선택되었을 것입니다. -1은 일반적으로 이름에 _ 또는 후행 NUL 문자를 포함합니다.

+0

toolchain이 의미하는 것은 무엇이며, 약 2n-1은 혼란스런 예가 될 수있다. –

+2

C이므로, \ 0은 안전한 내기 다. @ HATEMEL-AZAB : "Toolchain"은 일반적으로 전처리 기, 컴파일러, 링커 등 C 프로그램을 작성하는 데 사용되는 일련의 도구를 의미합니다. – MSalters

+0

보통 컴파일러 <-> 링커 수준의 명명 규칙은 mangling을 기반으로하므로 밑줄 친 부분의 가정을 직접 의심 할 것입니다. 이진 기호 테이블에 포함 된 이름은 일반적으로 NULL로 종료되지 않습니다. 그들은 고정 된 길이로 채워져 있습니다. 어쨌든, 그것은 단지 편리한 한계입니다. –