2.7 Identifiers

프로그램을 작성할때 변수, 함수, 매크로 및 기타 엔티티의 이름을 정해야하는데, 이런 이름을 식별자라고 한다. C에서 식별자는 문자, 숫자, 밑줄까지 포함하나, 문자 혹은 밑줄로 시작해야하는 규칙이 있다. (C99에서 식별자는 특정 "범용 문자 이름"을 포함할 수도 있다.)

다음은 가능한 식별자의 예이다.

times10            get_next_char          _done

다음은 불가능한 식별자들이다.

10times       get-next-char

10times는 문자나 밑줄이 아닌 숫자로 시작하고, get-next-char 는 밑줄이 아닌 마이너스 기호(-)를 사용했기에 불가능하다.

C는 대문자를 구분하기에 식별자에서도 대소문자를 구분한다. 예를 들면, 다음 식별자들은 모두 다르다.

job   joB   jOb  jOB   Job   JoB   JOb   JOB

이 8개의 식별자는 각각 완전히 다른 방식으로 동시에 사용될 수 있다. (이 경우는 난독화를 사용하는 경우이다.) 분별있는 프로그래머들은 다소 관계가 있는 식별자가 아닌한, 다르게 보이게 하려고 노력한다. C에서는 대소문자구분이 중요하기 때문에 많은 프로그래머들은 가독성을 위해 필요한 경우에 밑줄을 삽입하고 매크로를 제외한 식별자에서 소문자만 사용하는 규칙을 따른다.

symbol_table    current_page    name_and_address

다른 프로그래머들은 밑줄을 사용하지 않는 대신 대문자를 사용하여 식별자 내에서 각 단어를 시작한다.

symbolTable      currentPage     nameAndAddress

(첫 글자도 대문자로 표시하기도 한다.) 앞의 스타일은 전통적인 C에서 흔히 볼수 있지만, 후자의 경우 JAVA와 C#에서 널리 사용되기 때문에 더욱 인기가 있다. 다른 합리적인 규칙도 있는데, 매번 프로그램에 나타나는 것과 동일한 방식으로 식별자를 대문자로 표시하는 것이다. 

C는 식별자의 최대 길이에 제한을 두지 않으므로 길고 설명이 되는 이름을 사용하는 것을 권장한다. current_page같은 식별자는 cp라는 이름보다 이해하기 쉽다.

Keywords

표 2.1의 키워드는 C컴파일러에 특별한 의미가 있으므로 식별자로 사용할 수 없다. C99에서 5개의 키워드가 추가되었다.

auto enum restrict unsigned
break extern return void
case float short volatile
char for signed while
const goto sizeof _Bool
continue if static _Complex
default inline struct _Imaginary
do int switch  
double long typedef 표 2.1
else register union (이탤릭체는 C99에서만)

C는 대소문자를 구분하기 때문에 키워드는 표 2.1에 표시된 대로 소문자로 정확히 프로그램에 나타내야한다. 표준 라이브러리의 함수이름(예를 들면, printf)에는 소문자만 포함된다. 전체 프로그램을 대문자로 입력하는 불행한 프로그래머의 곤경을 피해야한다. 컴파일러는 라이브러리 함수의 키워드와 호출을 구분할 수 없다.

 

식별자에 대한 다른 제한에 대해 주의해야한다. 일부 컴파일러는 특정 식별자(ex: asm)을 추가 키워드로 취급한다. 표준 라이브러리에 속하는 식별자도 제한된다. 이러한 이름중 하나를 잘못사용하면 컴파일 또는 연결중에 오류가 발생할 수 있다. 밑줄로 시작하는 식별자도 제한된다.

+ Recent posts