2009. 4. 15. 11:10
Namespace 규칙 및 Reserved 상태
2009. 4. 15. 11:10 in 프로그래밍 세계/Language Part 1 C/C++
ANSI C89에 따르면 Namespace 에 대한 다음과 같은 규칙이 있다.
1. 밑줄 문자로 시작하고, 두 번째 문자가 밑줄이거나 대문자인 모든 이름은( 모든 scope와 모든 namespace에서)
항상 reserved 상태이다.
2. 밑줄로 시작하는 모든 이름은 file scope에서 ordinary identifer ( 즉, 함수, 변수 typedef, enumeration constant
등 )를 위해 reserve되어 있다.
3. 어떤 표준 헤더 파일을 포함했을 때, 그 헤더 파일에서 제공하는 모든 매크로 이름은 reserve디어 있다.
4. (함수 이름처럼) External linkage( global, non-static )를 가지는 모든 표준 라이브러리 identifier들은
External linkage를 위한 identifier로 reserve되어 있다.
5. 표준 헤더 파일에 정의되어 있는, file scope를 가지는 typedef와 tag이름은 그 헤더 파일을 포함 시켰을 경우,
( 같은 namespace를 지나는 )file scope에서 모두 reserve되어 있다.
scope : 영역이라는 의미로 C언어에서는 4개의 scope가 존재한다. funtion, file, block, prototype.
prototype scope는 함수 prototype선언에서 파라메터 리스트 안에서 적용되는 것이다.
정리하자면
1.2 밑줄로 시작하는 이름을 쓰지 말라.
3 표준 매크로와 같은 이름을 쓰지말라.
4 표준 라이브러리에 있는 모든 변수 및 함수 이름과 다음 표에서 나온 이름을 쓰지 말라.
- Header Future directions patterns -
1. 밑줄 문자로 시작하고, 두 번째 문자가 밑줄이거나 대문자인 모든 이름은( 모든 scope와 모든 namespace에서)
항상 reserved 상태이다.
2. 밑줄로 시작하는 모든 이름은 file scope에서 ordinary identifer ( 즉, 함수, 변수 typedef, enumeration constant
등 )를 위해 reserve되어 있다.
3. 어떤 표준 헤더 파일을 포함했을 때, 그 헤더 파일에서 제공하는 모든 매크로 이름은 reserve디어 있다.
4. (함수 이름처럼) External linkage( global, non-static )를 가지는 모든 표준 라이브러리 identifier들은
External linkage를 위한 identifier로 reserve되어 있다.
5. 표준 헤더 파일에 정의되어 있는, file scope를 가지는 typedef와 tag이름은 그 헤더 파일을 포함 시켰을 경우,
( 같은 namespace를 지나는 )file scope에서 모두 reserve되어 있다.
scope : 영역이라는 의미로 C언어에서는 4개의 scope가 존재한다. funtion, file, block, prototype.
prototype scope는 함수 prototype선언에서 파라메터 리스트 안에서 적용되는 것이다.
정리하자면
1.2 밑줄로 시작하는 이름을 쓰지 말라.
3 표준 매크로와 같은 이름을 쓰지말라.
4 표준 라이브러리에 있는 모든 변수 및 함수 이름과 다음 표에서 나온 이름을 쓰지 말라.
- Header Future directions patterns -
<ctype.h> is[a-z]*, to[a-z]* (function)
<errno.h> E[0-9]*, E[A-Z]* (macros)
<locale.h> LC_[A-Z]* (macros)
<math.h> cosf, sinf, sqrtf, etc.
cosl, sinl, sqrtl, etc. (all functions)
<signal.h> SIG[A-Z]*, SIG_[A-Z]* (macros)
<stdlib.h> str[a-z]* (functions)
<string.h> mem[a-z]*, str[a-z]*, wcs[a-z]* (function)
<errno.h> E[0-9]*, E[A-Z]* (macros)
<locale.h> LC_[A-Z]* (macros)
<math.h> cosf, sinf, sqrtf, etc.
cosl, sinl, sqrtl, etc. (all functions)
<signal.h> SIG[A-Z]*, SIG_[A-Z]* (macros)
<stdlib.h> str[a-z]* (functions)
<string.h> mem[a-z]*, str[a-z]*, wcs[a-z]* (function)
5 표준에서 제공하는 typedef나 tag이름을 새로 정의하는 이름에 쓰지 말라.