문법
한국어 문장을 예시로 들어봅시다.
만약, "나는 프로그래밍을 한다" 라는 문장이 있다고 한다면, 아래 처럼 분류할 수 있습니다.
- 주어 : '나는'
- 목적어 : '프로그래밍을'
- 동사 : '한다'
C언어 역시 그러한 문법의 약속이 존재합니다.
어떤 언어를 배운다는 것은 이러한 약속을 이해하고, 사용한다는 것을 의미합니다.
앞으로 C 언어를 익히기 위해 문법들과 "주어","술어","목적어" 처럼, 해당하는 자리에 필요한 단어를 다룹니다.
이번 장에서는 일반적인 언어의 품사에 해당하는 부분에 대해 다루겠습니다.
Keyword (키워드)
C의 문법에서 제공되는 기본 단어는 흔히 키워드(Keyword)라 불립니다.
예를 들어, 한국어에서 주어로 쓰이는 대명사는 '나', '너', '우리', '그' 등이 있습니다. 사실 상 문법에 포함되어 의미가 미리 정해져 있는 단어들이 keyword 입니다.
예약어 (Reserved word) 라고 불리우며, 키워드는 명칭 (Identifier) 으로 사용할 수 없습니다.
Identifier (명칭)
변수나 함수의 선언과 같은 문법을 통해 C / C++ 에 존재하지 않는 의미를 지칭하기 위한 새로운 이름을 부여할 수 있습니다.
이것을 명칭 (Identifier) 의 정의 (Define) 이라고 합니다.
명칭으로 성립하기 위해서는 몇 가지 조건이 있습니다.
- 이미 기본적으로 의미가 존재하는, 키워드는 사용할 수 없습니다.
- 영문이나 숫자 혹은 언더바를 사용할 수 있습니다.
- 최근에는 유니코드 확장을 통해 한글 등을 명칭으로 사용할 수도 있습니다만, 컴파일러에 따라 지원되지 않을 수도 있습니다.
- 명칭은 대 소문자를 구분합니다. ( Icecream 과 icecream 은 서로 다른 명칭입니다. )
- 명칭 사이에는 공백문자를 포함하지 않아야 합니다.
- 명칭의 가장 첫 문자는 알파벳이나 언더바만 위치할 수 있습니다.
예 )
- 상수 300에 Population 이라는 명칭을 붙인다면, Population 은 300이라는 수를 지칭하는 이름이 됩니다.
Constant (상수)
항상 의미가 변하지 않는 값입니다.
예 )
- '1' 은 별다른 지시가 없더라도 우리는 수 '1' 을 의미한다고 생각할 수 있습니다.
- 'Hello World!' 역시 'Hello World!' 라는 문장으로 생각합니다.
정수
C / C++에서 정수 상수는 다음과 같이 표기합니다.
- 10진수를 표현할 때는 바로 수를 적으면 됩니다.
- 예) 10 20
- 8진수를 표현할 때는 앞에 0을 붙입니다.
- 예) 0123
- 16진수를 표현할 때는 앞에 0x를 붙입니다.
- 예) 0x8F
수에 접미사를 붙여 특정한 데이터 형을 명시할 수도 있습니다.
- int 를 표기할때는 별도의 접미사를 붙이지 않습니다.
- 예) 82
- unsigned int 를 표기할때는 u를 붙입니다.
- 예) 82u
- long 을 표기할때는 l를 붙입니다.
- 예) 82l
- unsigned long 을 표기할때는 ul를 붙입니다.
- 예) 82ul
실수
실수를 표현하는 방법은 크게 두가지입니다.
- 첫 번째는 있는 그대로 적는 방법입니다.
- 예) 3.1415
- 두 번째는 exponent 꼴로 표현하는 방법입니다.
- 예) 123.45e17는 123.456 * 10의 17승입니다.
- 예) 123.45e-12는 123.456 * 10의 -12승입니다.
수에 접미사를 붙여 특정한 데이터형을 명시할 수도 있습니다.
- float 을 표기할때는 f를 붙입니다.
- 예) 82.01f
- double 를 표기할때는 L를 붙입니다.
- 예) 82.01L
문자
문자 상수의 경우 작은 따옴표로 감싸서 표기할 수 있습니다.
몇몇 특수한 문자 상수는 (역슬러쉬)를 붙여서 표기하기도 합니다.
- 예) 'A' 'B' 'C' 'n'(개행문자)
문자열 상수는 큰 따옴표로 감싸서 표기할 수 있습니다.
- 예) "Hello World!"
문자열 상수가 길어서 두 줄 이상이 될 경우에는 \를 사용할 수 있습니다.
"Hello\\
World!"
문자 상수는 ASCII 표에 따른 숫자 상수로 취급될 수 있습니다. 문자열 상수는 끝에 'NULL' 이라고 하는 문자열을 끝을 나타내는 특수한 표기가 포함됩니다.
Operator (연산자)
수학 기호의 + - / *와 같은 사칙연산이나 대입 연산, 논리 연산 등이 존재하며, 포인터 연산자 등이 추가 됩니다.
연산자는 어떠한 명칭이 의미하는 변수의 데이터나 상수등을 가공하는데 사용됩니다. 만약 1 + 1이라는 식이 있다면 1은 상수, +는 연산자이며 가공한 결과는 2가 됩니다.
Punctuator(구두점)
,(쉼표) ;(세미콜론) () {} (괄호) : (콜론)와 같은 단락이나 단어를 구분하기 위해 사용됩니다.
쉼표는 여러 개의 명칭을 나열할 때 사용됩니다.
Honey, Icecream, Jelly
세미콜론은 문장의 마침표 역활을 합니다.
int Icecream;
괄호는 우선순위와 단락을 결정할 때 사용합니다.
((1+1)\*3) + 5
void Function()
{
}
White Space(공백)
공백 문자나 탭 문자, 개행 문자 등을 White Space 라고 부릅니다. 빈칸 혹은 띄어쓰기라고 할 수 있으며, 구두점과 마찬가지로 단락이나 단어를 구분하기 편리하게 만듭니다.
Comment(주석)
작성된 소스 코드를 설명하기 위한 부가적인 설명을 기술하는데에 사용됩니다. Comment 자체는 프로그램에 어떠한 영향도 주지 않으며, 컴파일 과정에서 무시됩니다.
- //는 //로 시작되는 해당 한 줄을 무시합니다.
- /* */ 는 /*로 시작해서 */를 만날 때까지의 모든 코드를 무시합니다.
- /* */ 는 또 다른 /* */와 겹쳐질 수 없습니다.
특정한 규칙에 따라 Comment 를 작성하는 것으로 자동화 된 문서를 생성하는 일에도 사용됩니다.