>

C ++ 03의 식별자에는 달러 기호가 허용됩니까? 는 C ++ 03에서 식별자의 달러 기호가 허용되지 않음을 다룹니다. GCC는이를 C 확장 으로 제공하며 C ++ 03 모드에서 진단. 그러나 C ++ 11에서는 int $ = 0  경고없이 컴파일됩니다.

이 답변 이유 $  구현 정의 식별자에는 진단이 필요하지 않기 때문에 허용 될 수 있습니다 :

The answer here is"Maybe": According to§2.11, identifiers may consist ofdigitsandidentifier-nondigits, starting with one of the latter.identifier-nondigitsare the usual a-z A-Z  과   밑줄, C ++ 11부터   유니버설 문자 이름(예 : \uBEAF \UC0FFEE32 ),및 기타 구현 정의 문자. 그래서 그것은 구현 정의입니다    $ 를 사용하는 경우  식별자로 허용됩니다. VC10 이상은   이전 버전 일 수도 있습니다. 심지어 같은 식별자를 지원합니다    こんばんわ .

     

하지만 :사용하지 않습니다. 가능한 한 읽기 쉽고 이식 가능한 식별자를 만드십시오. $  구현이 정의되었으므로   휴대용.

이 언어는 C ++ 03 표준에도 존재하므로이 언어가 매우 설득력있는 주장이라고 생각하지 않습니다.

§2.10/2

In addition, some identifiers are reserved for use by C ++ implementations and standard libraries (17.6.4.3.2) and shall not be used otherwise; no diagnostic is required.

$ 가 허용하는 표준의 변화  식별자 이름으로 사용 하시겠습니까?

  • 답변 # 1

    이것은 구현 정의 동작입니다. $  식별자 문법에는 포함되지 않습니다.C ++ 11의 식별자 이름 규칙은 다음과 같습니다.

    <올>

    숫자로 시작할 수 없습니다

    문자, 숫자, 밑줄, 범용 문자 이름 및구현 정의문자

    로 구성 가능

    키워드가 될 수 없음

    구현 정의 문자는 허용되며 gcc, clang 를 포함한 많은 컴파일러가 확장으로 지원합니다. , Visual Studio 및 주석에 언급 된 것처럼 분명히 DEC C ++ 컴파일러.

    문법은 C ++ 표준 섹션 2.11 초안에서 다룹니다.  식별자, <- 로 시작하는 메모를 추가했습니다. :

    identifier:
      identifier-nondigit            <- Can only start with a non-digit
      identifier identifier-nondigit <- Next two rules allows for subsequent 
      identifier digit               <-  characters to be those outlined in 2 above
    identifier-nondigit:
      nondigit                       <- a-z, A-Z and _ 
      universal-character-name
      other implementation-defined characters
    [...]
    
    

    clang 를 사용하여이 코드를 컴파일하면   -pedantic-errors 와 함께  컴파일되지 않습니다 플래그 :

    int $ = 0
    
    

    다음 오류가 발생합니다 :

    error: '$' in identifier [-Werror,-Wdollar-in-identifier-extension]
    int $ = 0;
        ^
    
    

  • 답변 # 2

    그렇지 않다. 달러 기호는 ASCII 0x24이며 표준의 부록 E.1 (charname.allowed)에 정의 된 범위 내에 있지 않습니다. 숫자도 아니고 숫자도 아니기 때문에 구현 정의 문자 여야합니다. 따라서 이것이 휴대용 C ++ 11이 아니라는 것에 동의합니다. 또한 식별자는 범용 문자로 시작해서는 안되며 식별자는 구현에서 허용하는 문자로 시작할 수 있습니다.

  • 이전 ruby - Rails로 Facebook 애플리케이션을 구축하기위한 현재 리소스는 무엇입니까?
  • 다음 MySQL에서 힌디어를 삽입하는 방법