나의 IT일지
C언어 프로그래밍의 기본 본문
프로그래밍은 컴퓨터한테 명령을 내리기 위해, 언어를 통해 코드를 작성하는 과정이며, 컴파일러를 통해 해당 코드(자연어)를 기계가 읽을 수 있는 언어인 기계어로 번역한 뒤 실행한다. 그렇다면 컴퓨터에게 명령하기 위해 사용하는 프로그래밍언어 중 C언어는 어떤 코드 구조로 되어 있는지 알아보자.
C언어의 기본구조
먼저 소스파일을 만들어서, 아래의 소스코드를 작성해 보자.
#include<stdio.h>
//main()함수의 시작
void main() {
int a,b,sum, sub ;
}
위의 코드구성을 해석해 보면 다음과 같다.
- #include<stdio.h> : 전처리로, 컴파일 하기 전(# : 선행처리자, 전처리기)에 입출력 라이브러리(stdio.h)를 해당 소스파일에 가져오라(include)는 명령
- // : 주석으로, 프로그램에 영향을 주지 않기 위한 문장, 코드에 대한 설명이 필요할 때 사용
- main() : 프로그램의 시작점으로, 함수 안에 있는 명령을 위에서 부터 아래로 절차적으로 실행한다.
- int : 변수(값을 저장하는 공간)를 선언하는 함수
즉, 해당 소스파일은 #include를 통해 입출력 라이브러리 헤더파일을 소스파일에 가져온 뒤, main함수의 블록({ })에 있는 int함수를 통해a,b,sum, sub라는 변수를 생성하도록 요청한 것이다.
그리고 이 소스파일을 실행하면, 다음과 같은 결과가 콘솔에 나타난다.
위의 결과창에 아무것도 출력이 되지 않은것을 볼 수 있다. 왜 그런 것일까? 그 이유는 출력함수가 없기 때문이다.
출력함수와 입력함수
우선 같은 프로젝트에 소스파일를 만들어, 아래의 소스코드를 작성해 보자.
#include <stdio.h>
void main() {
int a, b;
printf("a = ");
scanf("%d",&a);
printf("b=");
scanf("%d",&b);
printf("a=%d,b=%d\n", a, b);
}
위의 코드의 함수를 확인해 보자 (위의 코드 중 중복된 함수은 제외)
- printf(): ()안에 있는 값을 출력하는 함수, 출력함수라고 지칭
- scanf() : 입력받은 값을 변수에 저장하는 함수, 입력함수라고 지칭
출력함수의 형태는다음과 같다.
printf("내용") or printf("형식지정자",출력값)
출력함수는 ()안의 형식에 따라 출력방식이 달라진다. 예를들면, printf("C언어")면 C언어라는 문자가 출력, printf("%d",5)면 정수 5가 출력된다. 이들은 무슨 차이가 있는것일까? "C언어"의 경우에는 문자를 출력한 것이며, "%d",5의 경우에는 뒤의 출력값(5)을 형식지정자(%d)에 맞게 대입하여 출력한 것이다.
여기서 형식지정자에 대한 의문이 생길 수 있다. 간단히 설명하면, 형식지정자는 출력데이터가 어떤 형식으로 출력할지를 지정하는 문자이다. %d가 형식지정자 중 하나로, 10진수 정수를 지정한다.
입력함수의 형태는 다음과 같다.
scanf("형식지정자",&변수)
입력함수에서 변수는 꼭 형식지정자와 같은 형식을 가져야 한다. 예를 들면 scanf("%d",&a)에서 입력을 10으로 하면, a에 10이라는 정수 데이터가 저장이 되면서, 출력할 때, 정상적으로 이뤄진다.(a = 10)
하지만 단어를 입력하게되면, 저장이 되지않아 출력이 비정상적으로 이뤄진다. (a = -858993460)
위의 소스파일을 실행하면, 오류가 있다고 할 것이며, 원인은 scanf()와 main()이다.
먼저 scanf()는 안전하지 않아 scanf_s()를 대신 사용하는 걸 권하는 오류이다. 이거에 대한 해결법이 2개 있는데, 하나는 scanf_s()로 바꿔서 사용을 하는 방법, 나머지 하나는 해당 소스파일의 SDL검사를 끄는 방법이다. SDL검사를 끄는 방법은 소스파일을 왼쪽 클릭 후, 속성=>C/C++=>일반에서 SDL검사를 "예"에서 "아니요"로 바꾸면 된다.
main() 오류는 해당 프로젝트에 main함수가 2개가 존재하여 어느 함수를 실행해야 하는지 컴퓨터가 인지 하지 못하는 것이다. 이에 대한 해결법은 사용하지 않는 파일을 왼쪽 클릭 후, 속성=>구성 속성=>일반에서 빌드에서 제외를 "아니요"에서 "예"로 바꾸면 된다.
오류를 해결하고 디버그 하지 않고 실행(ctrl + F5)을 하면 다음과 같은 결과가 콘솔에 나타난다. (a에 10, b에 20을 입력)
전처리와 전처리 지시자(#)
전처리란 컴파일을 하기 전에 소스코드를 컴파일에 대한 환경을 조성하는 과정으로, 소스코드를 작성 및 컴파일하기 전에 전처리기(전처리 지시자(#))를 통해 사용이 가능하다.
- #include
지정한 파일의 내용을 해당 코드에있는 지시자가 있는 위치에 붙여놓는 명령으로 C언어에서 미리 만들어 놓은 파일은 "< >", 사용자가 직접만들어 놓은 파일은 큰따옴표(" " )로 지정한다.
'프로그래밍 언어 > C언어' 카테고리의 다른 글
출력함수 printf (0) | 2023.02.03 |
---|---|
상수와 키워드 (0) | 2023.02.02 |
변수와 자료형 (0) | 2023.02.01 |
Visual studio 2019 설치 (0) | 2023.01.30 |
프로그래밍과 C언어 (0) | 2023.01.29 |