반응형
상수와 변수
상수
- 상수 : 한번 정해지면 그 값을 변경할 수 없는 수. 값이 정해진 상수는 프로그램 실행 도중에 값을 변경할 수 없다.
- 정수형 상수 : 10진수, 8진수, 16진수로 표현할 수 있다.
- 실수형 상수 : 부동소수점형 상수라고도 하며, 정수형보다 큰 값이나 작은 값을 처리하는 데 사용된다. 실수형 상수는 double형을 기본 자료형으로 사용한다.
- 문자형 상수 : 단일 인용부호('')로 묶여있는 1개의 영문자나 숫자문자이다. ASCII 코드값이 사용된다.
- escape 문자의 경우 \n(줄바꿈), \t(탭), \0(ASCII 코드값이 0인 문자_null문자) 등이 있다.
- 문자열 상수 : 이중 인용부호("")로 묶여 있는 복수개의 영문자와 숫자로 이루어진 상수이다. 기억공간에 보관될 때에는 문자열 끝에 null 문자(\0)가 추가된다.
변수
- 변수 : 프로그램 실행 도중 변할 수 있는 값이 저장되는 기억공간이다. 자료를 저장할 기억공간을 확보하고 이 공간에 이름을 붙여준 것.
- 변수를 사용하기 전에는 반드시 그 변수를 선언하여 컴파일러가 기억공간에서 일정 공간을 확보할 수 있도록 해야 한다.
- 변수의 특징
- 모든 변수는 이름이 있다.
- 모든 변수는 정해진 자료형이 있다.
- 모든 변수는 할당된 값을 갖는다.
- 변수명의 정의 규칙
- 모든 변수는 사용되기 전에 선언되어야 한다.
- 반드시 영문자나 밑줄(_)로 시작해야 한다.
- 중간에 숫자, 밑줄(_)을 섞어서 명명할 수 있다.
- 중간에 밑줄(_) 이외의 특수문자를 섞어서 명명할 수 없다.
- 대소문자를 구별하여 사용한다.
- 예약어는 사용할 수 없다.
반응형
자료형과 변수 선언
자료형
기본 자료형의 크기와 범위
- 정수 자료형
- int로 정의되며, 앞에 크기를 나타내는 short, long 키워드를 붙이거나 부호 있는 정수를 나타내는 signed 키워드와 부호 없는 정수를 나타내는 unsigned 키워드를 붙여 정의한다.
- 다른 키워드와 같이 사용할 때 int는 생략 가능하다.
- 실수 자료형
- float(4byte), double(8byte), long double(8byte)이 있으며 기본형은 double이다.
- float형은 단정밀도 부동 소수점, double형은 배정밀도 부동 소수점으로 저장된다.
- 문자형
- ASCII 코드를 사용하여 처리
- -128~127까지의 값을 표현할 수 있음
- 8진수, 16진수의 지정
- 8진수는 숫자 앞에 0을 입력하면 된다. ex) int octal_value = 010
- 16진수는 숫자 앞에 0x를 입력하면 된다. ex) int hex_value = 0xAC
- 열거형
- 변수가 가질 수 있는 값을 나열해 놓은 것
- 열거형은 제한적이나, 숫자 대신 단어를 사용할 수 있어 프로그램의 가독성을 높인다.
- enum 태그명 {열거자1, 열거자2, .... }
- ex) enum day {SUN, MON, TUE, WED, THU, FRI, SAT};
- 열거자의 값은 디폴트 첫 번째는 0이고, 각 원소는 이전 원소의 값보다 하나 더 큰 값을 갖는다.
변수 선언
- 변수명과 변수가 가질 자료형을 지정하여 변수를 위한 기억공간을 할당하는 것
- 자료형 변수명;
- ex) int num;
- 변수 선언 시 고려해야 할 사항
- 변수에 저장될 값의 크기
- 변수의 선언 위치
- 변수의 초기화
변수에 저장될 값의 크기
- 해당 변수에 저장하게 될 자료의 최솟값과 최댓값의 범위를 고려하여 자료형 선택
- 자료형이 가지는 범위보다 더 큰 값이나 더 작은 값을 대입하면 오버플로(overflow) 또는 언더플로(underflow)가 발생한다.
변수의 선언 위치
- 변수가 통용되는 범위를 결정하므로 매우 중요하다.
- 함수의 외부와 내부에 선언할 수 있다.
- 함수의 외부에서 선언된 변수는 프로그램 어디에서나 쓸 수 있는 전역변수가 된다.
- 함수 내부에서 선언된 변수는 선언된 함수의 내부에서만 사용하며 이는 지역변수가 된다.
- 전역변수 : 프로그램이 실행되는 동안에는 항상 기억공간에 존재하기 때문에 메모리상에서 항상 존재하는 자료 영역에 저장된다. 초깃값을 설정하지 않아도 0으로 자동으로 초기화된다.
- 지역변수 : 함수가 호출될 때 생성되어 함수의 실행이 끝나면 기억공간에서 소멸된다. 그렇기 때문에 임시 기억공간인 스택 영역에 저장된다. 초깃값이 자동으로 설정되지 않는다.
변수의 초기화
- 모든 변수는 변수 선언이 이루어지면 선언된 변수에 특정 값을 부여해야 하며, 이를 변수의 초기화라고 한다.
- 변수는 기억공간에 존재하고 있던 기존의 값(쓰레기 값)을 그대로 유지하고 있기 때문에 초기화하지 않으면 에러가 발생할 수 있다.
반응형
선행처리기
선행처리기란?
- 컴파일 명령을 내렸을 때 컴파일에 앞서 프로그램 선두에 선언된 지시자들을 미리 처리하는 역할
- C언어로 작성된 소스 코드를 실행 파일로 만드려면 다음과 같은 과정을 거쳐야 한다.
- 선행처리
- 컴파일
- 링킹
- 소스 파일을 컴파일러에 전달하기 전에 사용자가 정의한 각종 내용을 먼저 처리한다. 예를 들면 *.h(헤더 파일)의 경우는 컴파일을 시작하기 전에 해당 헤더 파일을 불러와 소스 파일과 연결시켜 준다.
- 선행처리기 종류
- #inclued : 파일 포함
- #define : 매크로 정의
- #if, #else, #elif, #endif : 조건부 컴파일
- 선행처리기 사용 시 주의할 점
- 반드시 #으로 시작
- 명령문 끝에 세미콜론(;)을 붙이지 않는다.
- 한 줄에 하나의 명령만 기재
- 소스 프로그램의 첫 부분(도입부)에 위치한다.
반응형
파일 포함
- #include <파일명>
#include "파일명" - #include 다음에 제시된 파일을 현재 프로그램에 포함
- <파일명>은 표준 디렉터리(보통 include 디렉터리)에서 파일을 찾아 포함한다.
- "파일명"은 현재 사용중인 디렉터리나 지정된 디렉터리 파일을 찾아 포함, 또는 드라이브나 경로가 사용될 수 있음.
- #include는 보통 C 언어에서 제공되는 헤더 파일(*.h)을 자신의 소스 파일에 읽어 들여 함께 컴파일하고자 할 때 사용된다.
- 프로그래머가 헤더 파일을 만들 수있으며 확장자가 .h이기만 하면 된다.
매크로 정의
- #define을 사용하여 단순 치환되는 자료를 말한다.
- 프로그램 작성 시 명령이나 수식 또는 상숫값이 자주 사용될 때 이들을 대표하는 이름을 붙여 사용하는 대상을 매크로라고 한다.
- 매크로의 정의는 매크로 상수 정의와 매크로 함수 정의로 나눌 수 있다.
- 매크로 사용 시 주의할 점
- 매크로명은 일반적으로 대문자를 사용한다.
- 매크로 정의문 끝에는 세미콜론(;)을 사용하지 않는다.
- 문자열이 한 줄을 넘어설 때는 \를 사용한다.
- 매크로 정의를 해제할 때는 매크로명만 기입한다. ex) #undef 매크로명
매크로 상수 정의
- #define 매크로명 자료 → 매크로 정의
#undef 매크로명 → 매크로 정의 해제
ex) #define PI 3.141592
매크로 함수 정의
- #define 매크로명(인수) (수식)
ex) #define AREA(x) (3.141592 * (x) * (x)) - 매크로 함수 장점
- 선행처리기에 의한 단순 치환 방식이므로, 전달 인자의 자료형을 명시할 필요가 없고, 또 어떠한 자료형 변수를 인자로 전달해도 잘 동작한다.
- 한두 줄의 코드의 경우 함수로 정의하는 것보다 속도가 빠르다.
조건부 컴파일
- 조건에 따라 프로그램을 컴파일하는 명령으로, 최적의 코드로 프로그램을 작성할 수 있기 때문에 시스템의 성능을 향상시킬 수 있다.
- #if 조건
명령문;
#endif - #if 조건
명령문1;
#else
명령문2;
#endif - #if 조건
명령문1;
#elif 조건2
명령문2;
#else
명령문3;
#endif - 조건이 참이면 명령문을 코드로 생성하여 컴파일, 거짓이면 코드는 생성되지 않음.
- 실행 중에 값이 결정되는 변수를 지정하거나 함수를 호출할 수 없으며, 주로 매크로 값이 지정된다.
반응형