Secure-Coding-C-DCL-4 C 언어 시큐어코딩 - Declare and Initialization 4 예약된 식별자를 선언하거나 정의하지 않는다. 밑줄과 대문자 또는 밑줄로 시작하는 모든 식별자는 항상 그 용도가 예약되어 있다. 예약된 식별자를 매크로 이름으로 정의하거나, 예약된 컨텍스트에서 식별자를 선언하거나 정의하지 않는다. 잘못된 코드 예제 (Include Guard) C 표준 라이브러리에 헤더에 구현되어 정의된 이름이 없는 경우에도 컴파일러에 의해 암시적으로 미리 정의된 이름과 충돌할 수 있다. # ifndef _MY_HEADER_H_ # define _MY_HEADER_H_ /* Contents of <my_header.h> */ # endif /* _MY_HEADER_H_ */ 올바른 코드 예제 (Include Guard) 매크로 이름을 밑줄로 시작하지 않는다. # ifndef MY_HEADER_H # define MY_HEADER_H /* Contents of <my_header.h> */ # endif /* MY_HEADER_H */ 잘못된 코드 예제 (File Scope Objects) _max_limit 은 정적이므로 충돌의 영향을 받지 않을 것으로 생각할 수 있으나, size_t를 정의하기 위해 포함된 이름들과 충돌할 가능성이 있으며 컴파일러는 예약된 이름을 암시적으로 선언할 수 있다. _limit 은 런타임 라이브러리에 정의된 동일한 이름의 심볼과 충돌할 수 있다. # include <stddef.h> static const size_t _max_limit = 1024 ; size_t _limit = 100 ; unsigned int getValue ( unsigned int count ) { return count < _limit ? count : _limit