개발 이야기/C

[C 언어 기초 정리 01] C 프로그래밍 & 입출력

혁진 2023. 9. 20. 22:48

사담이다. 사실 c를 배운지는 오래되었지만, 너무 주먹구구식으로 배웠었다. 하지만.. 컴공(소) 전공수업을 들으면서 c로 코드를 짤 일이 매우매우 많아졌고..! 코드 예시도 c가 대다수라 이렇게 급하게 c 프로그래밍의 기초적인 내용들을 작성해본다. 현재 배우고 있는 내용 특성상 포인터와 포인터함수에 관한 내용을 위주로 작성하려고 한다.

아래의 내용들은 http://www.tcpschool.com/c/ 의 내용들과 https://wikidocs.net/book/1411 를 참조해서 작성하였다.  

Program & Programming

Program이란 무엇일까? 프로그램이라는 것은 어떠한 일의 진행계획이나 순서를 말한다고 한다. 

프로그램이란 '목적을 위해 작성된 일련의 명령문(어)의 순서나 목록'이라고 할 수 있다. 

이렇게 작성된 프로그램은 사실 실행되기 위해서는 여러 단계를 거치는데 c에서는 아래와 같다(각 언어의 특징별로 애래의 단계는 차이가 있다)

출처: http://www.tcpschool.com/c/c_intro_programming

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;
}