* 구문 (syntax)
단어와 구두점을 사용하여
올바른 프로그램을 만들 수 있도록 하는 규칙
컴퓨터는 정확한 구문만 이해한다
* 토큰 (token)
기본 처리 단위
컴파일러는 문자의 집합인 프로그램을
컴퓨터가 이해할 수 있는 실행 프로그램 혹은 실행 파일로 변환
이 때 문자들을 토큰으로 분리
토큰은 공백 문자 혹은 구두자에 의해 구분된다
공백 문자 (whitespace character)
* 기본 토큰
1. 키워드
2. 식별자
3. 상수
4. 문자열 상수
5. 구두자
* 전처리기 토큰
전처리기에 의해 처리
1. 헤더 이름
2. 식별자
3. 전처리 숫자
4. 문자 상수
5. 문자열 상수
6. 구두자
전처리 과정이 끝나면
모두 기본 토큰으로 변환됨
* 주석문 (comment)
설명하기 위해 사용되는 것
설명서 역할
프로그램의 일부분이지만 실행되지 않는다
1. 다중 줄 주석문
2. 줄 단위 주석문
프로그램의 의도를 기록함으로써
유지보수에 유리하게 한다
* 다중 줄 주석문
여러 줄에 걸쳐서 주석 기술
/*로 시작하여 /*로 끝난다
다중 줄 주석문은 이렇게 사용한다
/*****************************************************
* *
* 2018년 10월 1일에 고객 요청으로 수정했음 *
* *
*****************************************************/
* 줄 단위 주석문
한 줄 내에서 주석 기술
//로 시작하여
그 행의 끝까지 주석문으로 처리
쉽게 주석을 달 수 있다
행 단위의 설명에서 사용
* 키워드 (keyword)
특별한 의미를 갖는 단어
컴파일러는 키워드를 보고 프로그램의 의도를 파악한다
int, float은 데이터 종류를 지정
return 함수의 끝을 나타냄
키워드는 특별한 의미를 가지고 있기 때문에
프로그램에서 다른 요도로 사용할 수 없다
* 식별자 (Identifier)
변수, 함수, 태그, 레이블 등을
말 그대로 식별하기 위해 사용하는 이름
식별자 규칙
1. 알파벳, 숫자, 밑줄 문자를 조합해서 만든다
2. 첫 문자는 반드시 알파벳 혹은 밑줄 문자_
3. 키워드는 식별자로 사용 불가능
4. 대소문자 구분
C가 제공하는 함수와 매크로는 키워드가 아니지만
식별자로 다시 정의하여 사용하지 말 것
ex) scanf, printf
main은 C 프로그램이 반드시 가지고 있어야 하는 함수 이름이므로
식별자로 사용 불가능
밑줄 문자_로 시작하는 식별자는 만들지 않는 것이 좋다
C 시스템이 밑줄 문자_로 시작하는 식별자를 많이 사용하기 때문
용도나 의미가 쉽게 연상되는 식별자를 사용
ex) radius, diameter, pi 등
가독성에 좋다
* 상수 (constant)
c의 기본 토큰 중 하나
1. 정수 상수
2. 부동형 상수
3. 문자 상수
4. 열거 상수
상수는 자신의 값과
형(type)을 갖는다
상수들은 모두 컴파일러에 의해
토큰으로써 수집됨
* 정수 상수 (Integer constant)
1. 10진 정수 상수
2. 16진 정수 상수
3. 8진 정수 상수
16진 정수는 0x 혹은 0X로 시작
ex) 0x17 = 23
8진 정수는 0으로 시작
ex) 017 = 15
16진 정수는 변환 명세로 %x 사용
접두사 0x를 붙이고 싶다면 변환 명세로 %#x 사용
8진 정수는 변환 명세로 %o 사용
접두사 0을 붙이고 싶다면 변환 명세로 %#o 사용
정수 상수 예제 코드
..~~~~..
#include <stdio.h>
int main(void) {
printf("1024 : %5d, %5x, %o\n", 1024, 1024, 1024);
printf("0x10 : %5d, %5x, %o\n", 0x10, 0x10, 0x10);
printf(" 077 : %5d, %5x, %o\n", 077, 077, 077);
printf("\n");
printf("1024 : %5d, %#x, %#o\n", 1024, 1024, 1024);
printf("0x10 : %5d, %#x, %#o\n", 0x10, 0x10, 0x10);
printf(" 077 : %5d, %#5x, %#4o\n", 077, 077, 077);
return 0;
}
/*
실행 결과는 다음과 같다
1024 : 1024, 400, 2000
0x10 : 16, 10, 20
077 : 63, 3f, 77
1024 : 1024, 0x400, 02000
0x10 : 16, 0x10, 020
077 : 63, 0x3f, 077
만약 %#o와 %#x에서 특정 자릿수만큼 표현하고 싶다면
%#5x, %#5o와 같이 사용하면 된다.
*/
..~~~~..
* 부동형 상수 (실수 상수)
1. 10진 부동형 상수
2. 16진 부동형 상수
10진 부동형 상수
일반적으로 사용하는 소수점 표기법 혹은 지수 표기법으로 표기
1. 소수점 표기법
2. 지수 표기법 (e 혹은 E를 통해 10진 지수 명시)
16진 부동형 상수
0x 혹은 0X로 시작하는 16진 상수를 쓱고
그 뒤에 p 혹은 P로 시작하는 2진 지수를 명시
printf()에서는
소수점 표기법으로 출력하는 경우 f 혹은 F 변환문자 사용
지수 표기법으로 출력하는 경우 e 혹은 E 변환문자 사용
16진 부동형으로 출력하는 경우 a 혹은 A 변환문자 사용
C는 정수 상수와 부동형 상수를 명확히 구분한다
연산에서 역시 구분한다
ex) 5 / 2 = 2
5.0 / 2.0 = 2.5
5.0 / 2 = 2.5
부동형 상수 예제 코드
..~~~~..
#include <stdio.h>
int main(void) {
printf(" 3.14 : %.2f, %.2a, %.2e\n", 3.14, 3.14, 3.14);
printf(" 314e-2 : %.2f, %.2a, %.2e\n", 314e-2, 314e-2, 314e-2);
printf(" 0x10p-2 : %.2f, %.2a, %.2e\n", 0x10p-2, 0x10p-2, 0x10p-2);
return 0;
}
/*
실행 결과는 다음과 같다
3.14 : 3.14, 0x1.92p+1, 3.14e+00
314e-2 : 3.14, 0x1.92p+1, 3.14e+00
0x10p-2 : 4.00, 0x1.00p+2, 4.00e+00
0x1.92p+1의 경우
0x1.92p+1
= (1 * 16^0 + 9 * 16^-1 + 2 * 16*-2) * 2^1
로 계산한다
*/
..~~~~..
* 문자 상수 (Character constant)
작은 따옴표로 둘러싸인 한 문자
ex) 'a', 'b', '+'
와이드 문자 상수 (wide character constant)
일반 문자 상수에 접두사 L을 붙인다
ex) L'a'
와이드 문자 상수는 보통 유니코드를 다룰 때 사용한다
이스케이프 시퀀스 (escape sequence)
개행 문자, 탭 문자, 백스페이스 문자 등을 문자 상수로 만들 때 사용
역슬래쉬\와 + 문자로 구성
이스케이프 시퀀스는 문자열 상수에서도 사용 가능
이 때 printf()에서 %c 변환명세 사용
ex) '\a'는 벨소리
\\ 역슬래시\를 출력하기 위한 이스케이프 시퀀스
백스페이스는 이미 출력된 문자를 하나 지우는 것
* 열거 상수 (Enumeration constant)
enum으로 정의되는 열거형에서 선언된 식별자
* 문자열 상수 (string constant)
(문자열 리터럴 (string literal))
C의 기본 토큰 중 하나
메모리의 연속된 공간에 저장된다
문자열 상수와 문자 상수는 완전히 다른 것
"a"는 문자열 상수
'a'는 문자 상수
"a"와 같이 하나의 문자만 있어도 문자열 상수이ㅏ다
와이드 문자열 상수
문자열 앞에 접두사 L을 붙여 표시
ex) L"a"
문자열 상수에 큰따옴표" 혹은 역슬래시\를 포함시키고 싶다면
이스케이프 시퀀스 \"와 \\ 사용
두 개의 문자열 상수가 공백으로 분리되어 있다면 (스페이스, 탭 문자)
컴파일러는 이 두 문자열 상수를 결합해서
하나의 상수로 만든다
ex) "C " "programming"일 경우 -> "C programming"으로 인식
이 때 콤마, 구분은 없다
printf()에서 문자열이 너무 길 경우
\을 이용해서 중간에 끊고
다음 줄에서 계속 이어 쓸 수 있다
문자열 상수 예제 코드
..~~~~..
#include <stdio.h>
int main(void) {
printf("%s\n", "Programming " "is " "fun!!");
printf("%s\n", "\"C\" programming language \
is a high-level language.");
return 0;
/*
실행 결과는 다음과 같다
Programming is fun!!
"C" programming language is a high-level language.
*/
}
..~~~~..
* 구두자 (punctuator)
C 구문에 의미를 갖고 있는 기호들
다이그래프 (digraph)
<:은 [를
:>은 ]를
<%는 {를
%>는 }를
%:는 #을
%:%는 ##을 의미한다
다이그래프는
ASCII 코드를 지원하지 않아
[, ],, {, }, # 키가 없는 컴퓨터를 위해 제공된다
컴파일러는 구두자와 식별자가 공백 없이 서로 붙어 있어도
각각을 구분한다
하지만 공백을 이용해서 가독성을 높이도록 하자
중괄호()
1. 연산자의 우선순위 변경
2. 조건문 혹은 반복문의 제어수식을 구분
+ 더하기 연산자
++ 증가 연산자
+= 더하기 복합 배정 연산자
구두자 대부분은 연산자
기본 연산자
1. 배정 연산자
2. 산술 연산자
3. 논리 연산자
4. 비교 연산자
5. 비트 단위 연산자
* 프로그래밍에서의 정수와 실수
정수는 소수점이 없는 숫자
실수는 소수점이 있는 숫자라고 간단하게 생각해도 된다
* 정수 연산자와 실수 연산자
피연산자가 어떤 자료형에 속하느냐에 따라 결정된다
정수 연산자
피연산자가 모두 정수
실수 연산자
피연산자 중 실수가 하나라도 있을 경우
..~~~~....~~~~....~~~~....~~~~....~~~~....~~~~..
* 구문
프로그램을 올바르게 작성하는 규칙
* 기본 토큰
1. 키워드
2. 식별자
3. 상수
4. 문자열 상수
5. 구두자
* 주석문
프로그램의 설명을 위한 것
실행되는 문장은 아니지만
프로그램의 이해도를 높인다
1. 다중 줄 주석문
2. 줄 단위 주석문
다중 줄 주석문
/*로 시작해서 */로 끝난다
줄 단위 주석문
//로 시작해서 그 줄 끝에서 끝난다
* 키워드
프로그램에서 예약된 단어
다른 용도로 사용할 수 없다
* 식별자
객체들에 이름을 부여하기 위해 사용되는 것
알파벳 혹은 밑줄 문자로 시작
알파벳, 숫자, 밑줄 문자의 조합으로 만들어진다
* 상수
1. 정수 상수
2. 부동형 상수
3. 문자 상수
4. 열거 상수
* 정수 상수
1. 10진 정수 상수
2. 16진 정수 상수
3. 8진 정수 상수
16진 정수 상수는
0x 혹은 0X로 시작
8진 정수 상수는
0으로 시작
* 부동형 상수
실수 상수를 의미
1. 10진 부동형 상수
2. 16진 부동형 상수
* 문자 상수
작은 따옴표로 둘러싸인 한 문자
* 문자열 상수
큰 따옴표로 둘러싸인 문자들
* 이스케이프 시퀀스
특수한 문자를 표현하기 위한 것
역슬래시\ + 문자로 구성
* 구두자
대부분 연산자
사용 위치에 따라 의미가 결정
..~~~~....~~~~....~~~~....~~~~....~~~~..
* C의 기본 토큰
1. 키워드
2. 식별자
3. 상수
4. 문자열 상수
5. 구두자
* 16진 상수
16진 상수는 10~15를 나타내기 위해서
A, B, C, D, F를 사용한다
이 때 대소문자는 구분하지 않으며
혼합하여 사용할 수 있다
.14는 0.14로 인식된다
정수 변환명세에 문자 상수를 사용하면
아스키 코드값이 출력된다
ex) printf("%d", '0');이면 48 출력
* 캐리지 리턴
커서를 그 줄의 첫 번째 위치로 넘긴다
인쇄 위치 혹은 커서 표시 위치를
같은 줄(행)의 맨 앞 위치로 복귀시키는 것
* 폼피드
커서를 다음 페이지의 시작 부분으로 넘긴다
프린터에 보내면
연속 용지가 다음 페이지의 시작 부분으로 넘겨진다
수평 탭
가로 부분 탭
수직 탭
세로 부분 탭
연속된 두 문자열 상수는
그 사이에 구두자가 없으면
하나의 문자열 상수로 취급된다
ex) printf("C " "programming");은
"C programming"으로 인식
* 특이한 숫자들 (표현들)
부동 수수점 혹은 0으로 나눌 경우 나오는 숫자들
inf (양의 무한대)
-inf (음의 무한대)
nan(ind) (Not a Number)
nan은 1.0/0.0 - 1.0/0.0를 출력했더니 나왔다
'소프트웨어학부 > 절대 강자 C언어 코스웨어' 카테고리의 다른 글
6장. 배열 (0) | 2024.07.31 |
---|---|
5장. 함수 (0) | 2024.07.30 |
4장. 제어의 흐름 (0) | 2024.07.27 |
3장. 기본 자료형 (0) | 2024.02.13 |
1장. 프로그래밍 시작 (0) | 2024.02.04 |