이 블로그 검색

2019년 11월 10일 일요일

c++ 코드에서 언더스코어 ('_') 사용시 주의


오늘 유튜브에서 흥미로운 주제에 대한 짧은 동영상을 봤는데, c++에서 underscore ('_') 가 포함된 identifier 사용시 유의할 점에 대한 내용이었다. 컴파일러가 파싱할때 적용되는 내용이므로, 그 대상은 모든 변수, 클래스명, 함수명 등등 다 해당되는 내용이다. 구체적으로 1) underscore + 대문자로 시작하거나 혹은 2) double underscore 가 포함되거나 3) underscore로 시작되는 경우는 표준에서 컴파일러 구현을 위해 예약되거나, 전역 namespace 에 예약되었으므로 사용금지. 예를 들면,

    //이렇게 사용하지 말것.
    #ifndef   __MYHEADER_HPP__
    #define  __MYHEADER_HPP__
    #endif


    //중간에 __ 들어가는 것도 하지말고
    #ifndef  MYHEADER__HPP
    #define MYHEADER__HPP
    #endif
     
    //이런것도 하지말것
    int _myindex;
    int _MyIndex;

    //끝에 붙이는 underscore는 상관없다.
    int myindex_ ; //OK 

특히나 변수앞에 _ 붙이는 코드는 나는 그렇게 사용을 한적은 없지만, 다른 사람들 코드에서 그동안 수도 없이 봤는데, 그런거 볼때마다 거부감이 들었던 이유가 역시나 근거가 있는 내용이었다는 ... 반면 ' #ifndef' 같은 경우는 나도 그냥 생각없이 저런식으로 사용했었고.. 앞으로는  유념해서 코드작성을 해야겠다.

https://eel.is/c++draft/lex.name

* MS 의 경우에는 좀 틀린데,  _ 로 시작되는 경우는 허용되는것처럼 기술 되어 있다.
https://docs.microsoft.com/en-us/cpp/cpp/identifiers-cpp?view=vs-2019 
https://github.com/MicrosoftDocs/cpp-docs/blob/master/docs/cpp/identifiers-cpp.md

댓글 없음:

댓글 쓰기