[C 언어 기초 정리 01] C 프로그래밍 & 입출력
사담이다. 사실 c를 배운지는 오래되었지만, 너무 주먹구구식으로 배웠었다. 하지만.. 컴공(소) 전공수업을 들으면서 c로 코드를 짤 일이 매우매우 많아졌고..! 코드 예시도 c가 대다수라 이렇게 급하게 c 프로그래밍의 기초적인 내용들을 작성해본다. 현재 배우고 있는 내용 특성상 포인터와 포인터함수에 관한 내용을 위주로 작성하려고 한다.
아래의 내용들은 http://www.tcpschool.com/c/ 의 내용들과 https://wikidocs.net/book/1411 를 참조해서 작성하였다.
Program & Programming
Program이란 무엇일까? 프로그램이라는 것은 어떠한 일의 진행계획이나 순서를 말한다고 한다.
프로그램이란 '목적을 위해 작성된 일련의 명령문(어)의 순서나 목록'이라고 할 수 있다.
이렇게 작성된 프로그램은 사실 실행되기 위해서는 여러 단계를 거치는데 c에서는 아래와 같다(각 언어의 특징별로 애래의 단계는 차이가 있다)

1. 소스 파일(source file)의 작성: 프로그램을 작성하는 부분이다. 우리는 여기서 .c 확장자를 가진 c파일을 만든다
2. preprocessor에 의한 선행처리: 선행처리 문자(#)로 시작하는 선행처리 지시문의 처리 작업을 한다. 이는 소스를 재구성하는 역할만을 진행한다.
3. 컴파일러(compiler)에 의한 컴파일: c file을 object file로 변환해주는 과정으로 Interpreter와 다르게 코드 전체를 보고 기계어(0,1)로 한번에 번역해준다.
4. 링커(linker)에 의한 링크: obj파일은 라이브러리 파일들 및 운영체제와 인터페이스를 담단하는 시동코드(start-up code)들을 당연히 가지고 있지 않기에 하나 이상의 오프젝트 파일과, 라이브러리 파일, 시동코드등을 모두 합쳐 하나의 파일로 만드는 과정을 link라고 하며 linker가 이를 처리한다.
5. 실행 파일(executable file) 생성: 최종적으로 링커까지 모두 거치면, exe파일이 만들어진다.
C 프로그램의 기초
#include <stdio.h>
#define TEXT "Welcome to C Programming!!"
int main(){
printf(TEXT);
return 0;
}
대다수 위와 같이 #include 문(import느낌), #define 문, 함수로 구성되어있다.
printf() vs scanf()
printf() 함수와 scanf() 함수는 C언어 표준 입출력 함수 중에서도 가장 많이 사용되는 대표적인 입출력 함수이다.
printf() 함수
#include <stdio.h>
int printf(const char * restrict format, ...);
//example
printf("printf can print %d \n", 10)
//%.nf는 n자리까지 출력
printf("소수점 이하 6자리 이상: %.8f \n", 0.5667784);
printf("%s %c입니다. \n", "a를 대문자로 표현하면", 'A');
서식지정자
| 출력형식 | 출력 데이터 | 출력예시 |
| %d | 10진수 정수형 | 10 |
| %o | 8진수 정수형 | 12(8진수로 10) |
| %x | 16진수 정수형 | a(16진수로 10) |
| %u | 부호 없는 10진수 정수형 | 10 |
| %c | char | a |
| %s | string | 바보야 |
| %f | float 소수형태 | 0.1 |
| %e | 지수형태의 실수형 | 1.00000e-1 |
| %g | 소수와 지수형 중 짧은것 | 0.1 |
| %.nf | n자리만큼 출력(소수) | 0.00001 |
scanf() 함수
#include <stdio.h>
int scanf(const char * restrict format, ...);
int main(void)
{
int num01, num02;
printf("첫 번째 정수를 입력하세요 : ");
scanf("%d", &num01);
printf("두 번째 정수를 입력하세요 : ");
scanf("%d", &num02);
printf("입력하신 두 정수의 합은 %d입니다.\n", num01 + num02);
return 0;
}