C언어 기본
1971년 유닉스라는 운영체제를 개발하기 위해 데니스 리치와 켄 톰슨이 함께 설계한 범용적인 고급 언어(High-level) 언어
유닉스는 어셈블리 언어라는 저급(low-level) 언어로 만들어졌기 때문에 하드웨어의 의존도가 높았다. (이식성이 낮다)
-> cpu의 종류가 바뀌면 다시 작성
절차지향적 특성 – 정해진 순서의 실행흐름 중시
이식성이 좋다 – cpu의 종류에 상관없이 실행, 운영체제의 차이에 덜 민감
좋은 성능 – 성능에 민감한 소프트웨어의 개발에 주로 사용, 메모리의 양이 상대적으로 적고, 속도를 저하시키는 요소들을 최소화한 언어.
작성, 실행 방법
- 프로그램 작성
- 컴파일(Complie)
- 링크(Link)
- 실행파일 생성
c프로그램을 이루는 파일의 종류는 소스파일과 헤더파일 등으로 나눔
작성 시 .c로 하지 않으면 .cpp로 c++문법을 기준으로 컴파일 된다.
Hello world!
프로그램의 기본 구성
c언어 기본 단위인 함수의 이해
c언어로 프로그램 작성은 함수를 만들고, 실행순서를 결정
함수(function) – 입력에 따른 출력이 존재
함수의 정의 – 만들어진 함수, 실행이 가능한 함수
함수의 호출 – 함수의 실행을 명령하는 행위
인자의 전달 – 함수의 실행을 명령할 때 전달하는 입력의 값
프로그램 실행 시 main의 이름의 함수를 찾아 호출.
함수의 시작 형태
출력형태 함수이름 입력형태
{
함수의 몸체
}
int main(void){ -> 출력의 형태가 int이고 입력의 형태가 void인 main이라는 이름의 함수
함수의 몸체
}
출력의 형태는 함수임을 강조 시 사용하고, 반환형(return type)을 사용한다.
세미콜론(;) - c언어에서 문장의 끝을 표현하기 위해 사용, 컨트롤 문장(조건문과 반복문)에서는 사용X
표준 라이브러리
표준 함수는 직접 만들지 않아도 호출이 가능한, 기본적으로 제공하는 함수이다.
함수의 호출문에서 소괄호 안에는 함수호출 시 전달할 인자정보를 표현한다.
c언어는 많은 수의 표준함수를 제공한다.
이런 함수들의 모임이 표준 라이브러리이다.
헤더파일
표준함수의 호출을 위해 관련 함수와 관련 잇는 헤더파일을 선언이 필요하다.
ex) printf는 stdio.h 헤더파일이 필요하다.
1
|
#include <stdio.h>
|
확장자가 .h로 끝나는 헤더파일을 포함하라는 의미의 선언이다.
필요 시 여러 헤더파일을 삽입할 수 있다.
단, 헤더파일의 선언은 소소파일의 맨 앞부분, main 함수 정의 이전에 선언해야 한다.
return
함수를 호출한 영역으로 값을 반환(전달)하거나 현재 실행중인 함수의 종료를 의미한다.
1
|
return 0;
|
main 함수를 호출한 영역으로 0을 전달하여 함수를 빠져나간다.( main 함수의 종료로 프로그램 종료)
비정상 상황으로 종료 시 0이 아닌 다른 값을 사용한다.
주석
컴파일의 대상으로 제외하기 때문에 프로그램의 실행결과에 영향을 주지 않는다.
주석을 통해 코드에 대한 설명을 표시한다. 행과 블록 단위의 주석이 있다.
1
|
// 행 단위 주석
|
1
2
3
|
/*
블록 단위 주석
*/
|
행 단위 주석은 한 줄을 주석처리하고, 블록 단위 주석을 두 줄 이상 주석처리에 사용한다.
단, 블록 단위 주석(/* ~ */) 안에는 블록 단위 주석을 사용할 수 없다.
printf 함수
1
|
printf("Hello world! \n");
|
printf(인자 전달 장소)
표현한 문자열을 인자로 전달하면서 printf라는 이름의 함수를 호출하는 문장이다.
printf 함수는 함수호출 시 전달되는 문자열을 모니터에 출력하는 기능을 한다.
인자가 여러 개 있을 경우 , 으로 구분한다.
c언어에서는 " "를 사용해서 문자열을 표현한다.
\n는 이스케이프 시퀀스 중 하나로 개행(줄바꿈) 의미이다.
서식문자(conversion specifier)
1
2
3
4
5
6
7
8
|
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
printf("%d\n", 11618);
return 0;
}
|
출력 형태를 지정하는 용도로 사용한다.
서식문자의 삽입 위치는 제한이 없어서, 문자열을 조합해서 출력할 수 있다.
%d / %i | Signed decimal integer |
%u | Unsigned decimal integer |
%c | Unsigned char |
%s | String |
%p | Pointer in hexadecimal form |
%o | Unsigned octal integer |
%x / %X | Unsigned hexadecimal number |
%e | Floating point number in exponential format in e notation |
%E | Floating point number in exponential format in E notation |
%f | double number in decimal format |
%g / %G | double number in decimal format or exponential format depending on the value |
변수(variable)
값을 저장할 수 있는 메모리 공간의 이름(메모리 공간 자체)
선언으로 값의 저장, 참조, 변경이 가능하다.
1
|
int num;
|
num이라는 변수를 선언한다.
세부적인 의미는 int는 정수의 저장이 가능한 메모리 공간을 할당하여 그 공간의 이름은 num으로 지정한다.
1
|
num = 20;
|
num이라는 변수의 이름을 사용하여 값을 저장한다.
선언된 변수에 처음 값을 저장하는 것이 초기화, 이후 저장된 값을 변경할 때는 대입(대입 연산).
1
|
printf("%d", num);
|
변수 num의 값을 참조해서 출력한다.
1
2
|
int num1 = 10;
int num2 = 20, num3 = 30;
|
c언어에서는 선언과 동시에 초기화가 가능하다.
위의 예제는 두 개의 변수를 선언과 초기화를 동시에 하였다.
변수를 선언만 하고 초기화하여 값을 넣어주지 않으면 쓰레기 값이 저장된다. -> 초기화 시 0의 값을 넣어준다.
변수 이름 규칙
알파벳, 숫자, 언더바(_)로 구성
대문자와 소문자를 구분
숫자로 시작X, 키워드로 변수 이름 사용X
이름 사이의 공백
연산자
특정 연산을 요구할 때 사용하는 약속된 기호
= 대입 연산자
대입의 개념으로 오른쪽의 오는 값을 왼쪽에 오는 변수에 저장하는 형태로 사용한다.
1
|
num = 20;
|
+ 덧셈 연산자
댓글