C언어에는 함수, 변수, 상수 등에 대해서 명칭(식별자)을 붙입니다. 이들 식별자는 컴파일이 되어 기계어 코드로 변환되면 이름의 의미는 없어지고 함수, 변수, 상수의 위치에 대한 메모리 번지로 치환이 일어납니다. 식별자가 없다면 사람이 일일이 메모리 번지수를 기억하면서 코딩해야 하는 데, 이 들 식별자를 사용함으로써 컴파일러가 같은 이름이면 같은 번지로 mapping해서 알어서 해주는 역할을 합니다.
C언어는 이들 식별자에 대해서 다음의 규칙을 준수해야 합니다.
1. 명칭의 구성 가능 문자
첫글자 : 영문 대문자(A~Z), 영문 소문자(a ~z), $, _
이후 문자: 영문 대문자, 영문 소문자, 숫자(0~9), $, _
정상적인 명칭 예)
$temp
_temp
Temp
TEMP
temp
a2z
잘못된 명칭 예)
6pack
ab cd
ab-cd
ab@k
2. 대문자와 소문자를 구분
C언어에서는 식별자에 대해 대문자와 소문자를 다른 이름으로 취급합니다.
예를 들면,
#include <stdio.h>
void hello(void)
{
printf("hello!\n");
}
int main(int argc, char **argv)
{
Hello();
return 0;
}
위와 같이 hello( )이라 정의하고, Hello( )로 호출하면 다른 이름으로 인식하여 오류가 발생합니다.
3. 예약어(keyword 또는 reserved word)를 식별자로 사용금지
C언어에는 기능이나 문법 등을 정의하기 위하여 용도가 정해진 예약어(keyword, reserved word)가 있습니다. 이들 예약어는 식별자로 사용할 수 없습니다.
예약어 |
설명 |
asm |
inline assembler 코드 사용 keyword - 주로 OS등의 특정 부분에 성능을 위하여 assembler 코드를 사용하기 위해서 사용 |
auto |
변수 정의시에 주로 local 변수에 사용하나 생략해도 default로 auto와 같음 |
break |
while문, do ~ while문, for문, switch문 빠져나가기 위한 용도 |
case |
switch문의 구성 요소로서 분기에 사용 |
char |
1바이트 데이터 type |
const |
이름이 있는 상수를 정의 시에 사용함 |
continue |
while문, do ~ while문, for문에 대해서 continue 아래 부분은 수행을 하지말고 다음 회차 실행 |
default |
switch문에서 정해진 case 이외의 경우로 분기. if문의 else와 비슷 |
do |
do ~ while문의 시작을 의미하는 예약어 |
double |
배정도 부동소수점 데이터 type (약 15자리 정밀도의 실수값) |
else |
if문과 함께 사용하면서, if문의 값이 0일 때에 분기되어 실행되는 부분 |
extern |
변수 또는 함수가 현재의 파일이 아닌 다른 곳에 정의되어 있다는 의미 |
float |
부동소수점 데이터 type (약 7자리 정밀도의 실수값) |
for |
block을 반복할 횟수만큼 실행해야 하는 경우에 많이 사용하는 반복문 |
goto |
정해진 lable로 jump하는 예약어. 주로 중첩 반복문을 한번에 빠져나가는 용도로 사용 |
if |
문장의 내용이 0 아니면 실행하는 예약어 |
int |
기본 정수형 데이터 type |
long |
다른 데이터 type(int, long, double)의 앞에 붙어서 데이터 범위를 넓히는 역할 을 하는 예약어. 뒤에 다른 예약어가 없으면 int가 생략된 것으로 간주함 |
register |
CPU에 내장되어 있는 register가 미사용 상태에 있는 것이 있으면 데이터를 register에 저장해서 속도를 올려달라는 예약어. (반대 개념의 예약어 volatile) |
return |
함수를 호출한 곳으로 데이터를 전달하고 함수를 끝내는 예약어 |
short |
int 보다 좁은 범위의 정수형 데이터 type |
signed |
음수, 양수를 모두 갖는 정수형 데이터 type 정의시 사용 (생략시 signed) |
sizeof |
변수나 상수 등이 차지하고 있는 크기를 byte로 얻는 예약어 |
static |
변수, 상수, 함수 들에 대해서 인식 범위를 파일 내로 제약하는 예약어 |
struct |
여러개의 변수를 하나의 그룹으로 묶어서 사용자 정의 데이터 type을 만드는 예약어 |
switch |
정수형 데이터를 기준으로 1개의 값 단위로 분기하는 분기문. case, default와 함께 사용 |
typedef |
이미 존재하는 데이터 타입을 새로운 이름을 추가하는 예약어 |
union |
여러개의 변수를 같은 메모리 영역을 공유하는 예약어 |
unsigned |
다른 데이터 type(char, short, int, long)의 앞에 붙어서 0과 양수의 값만 가지는 데이터 type으로 만드는 예약어 (signed와 반대 개념) |
void |
함수 정의시 앞에 붙어서 return값이 없음을, 파라미터에서는 파라미터가 없음을 의미하는 예약어로 사용되고, void * 형태로 사용하여 정해지지 않은 데이터 type임을 의미하는 용도로 사용하는 예약어 |
volatile |
변수 앞에 붙어서 변수의 값이 변경되면 바로 주메모리에 저장하라는 예약어. register가 성능 등을 위하여 될 수 있으면 register에서 동작하라는 의미인 반면 volatile은 반대개념임. volatile은 multi-thread에서 thread간에 분기할 때에 특정 변수의 값으로 분기 로직이 구현되어 있을 경우 register에서 값이 변경되었는 데도 반영이 안되어 분기를 하지 못하는 것을 방지하는 욛도로 많이 사용함. 특히, 요즘의 컴파일러는 register 예약어가 없는 변수도 속도 최적화를 위하여 register를 사용하는 경우가 있는 데, volatile은 사실상 최적화를 하지말라는 의미 |
while |
정해진 조건이 0이 아닌 경우에 계속 반복하는 반복문 |
이들 예약어를 명칭으로 사용하면 예약어의 용도인지 변수명 또는 함수명으로 사용한 것인지를 알 수 없기 때문에 C언어에서는 예약어는 예약어로 인식합니다. 따라서 그 예약어의 문법에 맞게 사용되었는 지를 체크합니다.
'C언어 > 문법' 카테고리의 다른 글
8. 변수와 상수 (정수형) (0) | 2019.10.23 |
---|---|
7. C 프로그래밍의 시작 - 함수 (2) | 2019.10.22 |
5. 주석문(Comment) (0) | 2019.10.22 |
4. C 소스 파일 구성 (0) | 2019.10.20 |
3. C언어의 컴파일 과정 (0) | 2019.10.20 |