- C의 기본 구성
- 표준입출력 함수
- Q&A
- 마치며
- C의 기본 구성
: 1개 이상의 함수로 구성되어 있습니다.
: 함수는 1개 이상의 명령문(Statement)를 포함합니다.
(반환 자료형) (함수이름)(매개변수 목록)
{
명령문;
...
}
- 반환 자료형(Return Type)
: 함수에서 반환하는 값의 자료형입니다.
함수 이름
은 다음과 같은 규칙이 있습니다.영어 대∙소문자, 숫자, _(underscore)만 사용할 수 있습니다.
첫 글자는 숫자로 시작할 수 없습니다.
영어의 대∙소문자는 구분됩니다.
- 매개변수 목록(Parameter)
: 함수를 호출할 때 전달되는 값들을 받아올 변수입니다.
: 만약 호출 시 받아올 값이 없는 경우에는 생략할 수 잇습니다.
{} (중괄호)
- {} (중괄호)
: 함수의 시작과 끝을 나타냅니다.
: 함수의 블록(Block)이라고 표현합니다.
- 명령문 (Statement)
: 함수가 호출할 때, 수행해야 할 명령들의 목록입니다.
: 각 명령문 끝에는 반드시;(semicolon)
을 붙여주어야 합니다.
main()
함수
- main() 함수
: C프로그램 실행 시 최초로 호출되는 함수입니다.int main(void) { 명령문; ... return 0; }
main()
함수는 정상적으로 작동할 경우에는 0, 그렇지 않을 경우는 0이 아닌 값을 반환합니다.
프로그램이 실행될 때,
main()
함수에 포함된 명령문들을 제일 먼저 수행합니다.
따라서, 프로그램을 작성할 때는
반드시 구성해야 할 함수입니다.
하지만, 프로그램 내에 main()
함수는 반드시 1개만 존재해야 합니다.
- 주석(Comment)
: 프로그램 작성 시 주석을 작성할 경우, 시간이 지난 후 다시 볼 때나 다른 사람이 분석할 때 많은 도움이 됩니다.
/* ~ */
/*
여러 줄 주석 처리
*/
//
// 한 줄 주석 처리
- 표준입출력
: C언어의 입출력은 모두 스트림(Stream)을 통해서 이루어집니다.
- Stream
: 일련의 바이트로 구성된 데이터의 흐름으로, 장치의 종류와 관계없이 동일한 방법(입출력함수)으로 입출력을 수행합니다.
즉, 프로그램 작성 시,
표준입출력함수를 이용할 때는 헤더 파일을 반드시 포함시켜야 합니다.
ex) #include <stdio.h>
왜냐 하면,
표준입출력 함수에 대한 정보가 헤더 파일에 저장되어 있기 때문이죠.
printf()
함수
- printf() 함수
: 사용자가 원하는 내용을 출력할 때 사용하는 표준 출력 함수입니다.
: 형식 지정자를 이용하면 문자열 뿐만 아니라 다양한 type을 출력할 수 있습니다.printf("형식지정자 / 제어문자", 인수1, ..., 인수N);
프로그램 결과를 출력할 때는
""
사이에 입력하고, 값들을 인수 목록에 차례대로 나열합니다.다음 표는 자주 사용하는 형식지정자를 정리한 표입니다.
코드 | 의미 |
---|---|
%s | 문자열(String) |
%c | 문자, 정수를 유니코드 문자로 변환 |
%d | 10진 정수(Integer) |
%o | 8진 정수 |
%x | 16진 정수 |
%f | 부동소수점 숫자형(Float) |
%p | 포인터, 메모리 주소 |
%% | '%' 문자 자체 출력 |
다음 표는 자주 사용하는 제어문자를 정리한 표입니다.
코드 | 의미 |
---|---|
\n | 줄 바꿈 |
\t | 'Tab' 만큼 뛰움 |
\b | 이전 문자 지우기 |
\r | 줄 맨 앞으로 이동 |
\ | '\' 문자 출력 |
\' | '(작은 따옴표) 출력 |
\" | "(큰 따옴표) 출력 |
다음은 printf()
함수를 이용한 예시입니다.
#include <stdio.h>
int main(void) {
printf("%d, %f, %c, %s", 10, 10.5, 'C', "C++");
return 0;
}
[Result]
10, 10.500000, C, C++
: "%.(자릿수)f"
의 형태로 표현합니다.
#include <stdio.h>
int main(void) {
printf("%.3f", 3.141592); // 소수점 이하 3자리까지만 표현합니다.
return 0;
}
[Result]
3.142
: "%(정렬)(길이)(자료형)"
의 형태로 지정가능합니다.
: 정렬 방향은 +
는 오른쪽 정렬, -
는 왼쪽 정렬이 됩니다. ( +
는 생략 가능)
: 정렬을 하고 남은 자리는 공백
으로 채워집니다.
#include <stdio.h>
int main(void) {
printf("%10d\n", 1234); // 오른쪽 정렬
printf("%-10d", 1234); // 왼쪽 정렬
return 0;
}
[Result]
______1234
1234______
#include <stdio.h>
int main(void) {
printf("%.2f\n", 3.141592); // 소수점 이하 2자리까지 표현
printf("%10.2f\n", 3.141592); // 오른쪽 정렬, 10의 길이, 소수점 이하 2자리까지 표현
printf("%-10.2f\n", 3.141592); // 왼쪽 정렬, 10의 길이, 소수점 이하 2자리까지 표현
printf("%010.2f", 3.141592); // 공백을 0으로 채움
return 0;
}
[Result]
3.14______
______3.14
3.14______
0000003.14
마지막 예시에서 알 수 있듯이 공백
이 아닌 0
을 채우고 싶다면
"%0(정렬)(길이).(소수점)(자료형)"
을 사용하면 됩니다.
이 때, 정렬
은 무조건 오른쪽 정렬만 가능합니다.
소수점
이 지정된 상태에서 소수점의 나머지를 0
으로 채운다면 소수점 지정이 의미가 없기 때문이죠.
만약, %-010.2f", 3.141592
라고 한다면, 소수점 이하 2자리까지 표시하므로 3.14
가 되지만, 공백
을 0
으로 채우기 위해 3.14000000
이 된다면 소수점을 지정한 의미가 없기 때문에 안되겠죠??
그래서 실제로 출력을 해봐도 0
이 아닌 공백
으로 채워지죠.
#include <stdio.h>
int main(void) {
printf("%-010.2f", 3.141592);
return 0;
}
[Result]
3.14______
띠용(⊙_⊙)?
scanf()
함수
- printf() 함수
: 사용자가 원하는 내용을 입력받을 때 사용하는 표준 입력 함수입니다.
: 형식 지정자를 이용하면 문자열 뿐만 아니라 다양한 type을 입력받을 수 있습니다.
: 공백 문자나 'Enter'키를 구분자로 입력 받습니다.scanf("형식지정자", &변수1, ..., &변수N);
이 때, 입력을 받기 위한 임의의 공간으로 '변수(Variable)'를 사용합니다.
프로그램 결과를 입력받을 때는
""
사이에 입력하고, 값들을 변수 목록에 차례대로 나열합니다.&
를 붙여야 합니다.다음 표는 자주 사용하는 형식지정자를 정리한 표입니다.
코드 | 의미 |
---|---|
%s | 문자열(String) |
%c | 문자, 정수를 유니코드 문자로 변환 |
%d | 10진 정수(Integer) |
%o | 8진 정수 |
%x | 16진 정수 |
%f | 부동소수점 숫자형(Float) |
%lf | 부동소수점 숫자형(Double) |
%p | 포인터, 메모리 주소 |
%% | '%' 문자 자체 출력 |
다음은 scanf()
함수를 이용한 예시입니다.
#include <stdio.h>
int main(void) {
int a;
float b;
scanf("%d %f", &a, &b);
printf("%d, %f", a, b);
return 0;
}
[Input]
10 10.5
[Result]
10 10.500000
- 컴파일(Compile)
: C언어로 작성한 소스코드를 CPU가 실행할 수 있는 기계어 코드로 변환하는 것입니다.
1단계. 소스코드를 컴파일 하여 '오브젝트코드(Object Code)'로 만듭니다.
2단계. 링크 과정을 통해 '실행파일(Executable File)'로 만듭니다.
만약 통합개발환경(IDE)를 이용한다면,
단축키나 실행 버튼으로 자동으로 컴파일러를 실행하기 때문에,
간편하게 실행할 수 있습니다.
하지만 직접 컴파일러를 이용한다면,
실행파일을 만들어서 실행해야 합니다.
(조금 번거롭죠 🤔)
C 컴파일러는
Unix에서는 cc
로
Linux에서는 gcc
로
사용할 수 있습니다.
C 컴파일러에서 자주 사용하는 주요 옵션으로는
옵션 | 의미 |
---|---|
-o (fileame) | 컴파일 결과를 (fileName)에 저장합니다. |
-c | 오브젝트 파일까지만 생성합니다. 여러 개의 소스파일로 나누어 개발할 때 사용합니다. |
-g | 실행 파일에 디버깅에 필요한 정보가 포함됩니다. 디버깅이 필요할 때 컴파일을 할 시에는, 이 옵션을 함께 컴파일해야합니다. Visual Studio에서는 디버깅모드로 빌드하는 방법이 이 옵션에 해당합니다. |
다음은 C 컴파일러에서 옵션을 활용한 예시입니다.
gcc -o test test.c
: 소스파일 test.c를 컴파일 하여 실행파일 test로 저장
gcc -c test.c
: 소스파일 test.c를 컴파일 해서 오브젝트 파일 test.o를 생성
gcc -o test test.c -lm
: 소스파일 test.c를 컴파일하고 라이브러리 libm.a를 링크하여 실행파일 test를 생성
파이썬에 이어 C를 공부하게 됐습니다!
사실 C는 써 본 경험이 많아서 기억이 엄청 잘 나네요 😁
이제 앞으로 C의 기초에 대해서 배워볼텐데 열심히 공부해보겠습니다.!
[Reference] : 위 글은 다음 내용을 참고, 인용하여 만들어졌습니다.
- 전반적 내용 : 삼성 SW Expert Academy