공통(빌드) 시스템에서 C/C++ 식별자의 최대 길이는 얼마입니까?
나는 표준이 식별자의 최대 길이를 말한 것을 기억하지 못해서 이론적으로 그것들이 길 수 있습니다.실생활에서 이러한 이름은 적어도 컴파일러 및 링커 구현에 의해 제한될 수 있습니다.
모든 시스템에서 작동해야 합니다.
int a;
이 토막글
#!/usr/bin/perl
print "int" . "b" x 2**16 . ";";
정의되지 않은 참조를 제공하는 선언문을 만듭니다.std::
에 관한 것.ld
gcc/mingw를 사용하여 컴파일/링크하는 동안.
그렇다면 다른 시스템에서 식별자의 크기 제한은 무엇입니까?
C++ 표준의 부록 B는 구현체가 최소 1024자 길이의 식별자를 지원해야 한다고 명시하고 있지만, 이것은 필수 사항은 아닙니다.
MISRAC 2004 기준:
규칙 5.1(필수):식별자(내부 및 외부)는 31자 이상의 중요성에 의존해서는 안 됩니다.[미정의 7; 구현 5, 6] ISO 표준은 코드 이동성을 보장하기 위해 내부 식별자가 처음 31자로 구별되어야 합니다.컴파일러가 이를 지원하더라도 이 제한을 초과해서는 안 됩니다.이 규칙은 모든 이름 공간에 적용됩니다.매크로 이름도 포함되며 대체 전후에 31자 제한이 적용됩니다.ISO 표준에서는 최적의 휴대성을 보장하기 위해 대소문자를 불문하고 처음 6자로 구분해야 합니다.그러나 이러한 제한은 특히 심각하며 불필요한 것으로 간주됩니다.이 규칙의 목적은 현대 환경에 상응하는 정도로 ISO 요건을 완화하는 것을 승인하는 것이며, 31개의 문자/사례의 중요성이 구현에 의해 지원된다는 것을 확인해야 합니다.특히 식별자 이름이 긴 경우 식별자 이름을 사용할 때 하나 또는 몇 개의 문자만 차이가 나는 관련 문제가 있습니다.차이가 1(1)과 l( 소문자 L), 0과 O, 2와 Z, 5와 S, 또는 n과 h와 같이 쉽게 잘못 읽힐 수 있는 문자인 경우 문제가 심각해집니다.식별자 이름은 항상 시각적으로 쉽게 식별할 수 있도록 하는 것이 좋습니다.이 문제에 대한 특정 지침은 스타일 지침에 포함될 수 있습니다(섹션 4.2.2 참조).
저는 이 규칙을 사용합니다.아마도 누군가가 나에게 "31개 이상의 식별자를 인식할 수 없는 컴파일러가 보이나요?"라고 물을 것입니다.예, IAR RL78 v2.21.1에서 아무런 경고와 오류 없이 2개의 식별자를 정의했지만 액세스에 문제가 발생했습니다(지금은 정확한 시나리오가 무엇이었는지 기억하지 못합니다).
언급URL : https://stackoverflow.com/questions/6007568/what-is-max-length-for-an-c-c-identifier-on-common-build-systems
'programing' 카테고리의 다른 글
MySQL group_concat에 해당하는 Presto (0) | 2023.08.06 |
---|---|
'X-CSRF-TOKEN'을 전송하도록 스프링 보안을 구성하는 방법은 무엇입니까? (0) | 2023.08.06 |
도커호스트에서 볼륨 마운트 (0) | 2023.08.06 |
스프링 "고정형"이란 무엇입니까? (0) | 2023.08.06 |
Angular 2 자산 폴더에서 CSS 배경 이미지 로드 (0) | 2023.08.06 |