반응형

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 Programming Language 문법

1. C 프로그래밍 언어는? 2. C언어 개발 환경 (실습 환경) 3. C언어의 컴파일 과정 4. C 소스 파일 구성 5. 주석문(Comment) 6. 식별자 명명 규칙 7. C 프로그래밍의 시작 - 함수 8. 변수와 상수 (정수형) 9. 변..

www.it-note.kr

 

반응형

'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
블로그 이미지

자연&사람

행복한 개발자 programmer since 1995.

,