본문 바로가기

C언어20

[C언어]C프로그램 빌드 과정(컴파일,링크,빌드의 차이) 빌드(build)란? 빌드의 뜻은 소스코드를 기계가 이해할 수 있는 기계어로 변환해 주는 과정으로 명령어를 모두 모아서 실행 가능한 실행파일로 만드는 과정으로 세부적으로 나누면 4가지로 나뉘어진다. 전처리(Preprocessing) 컴파일(Compilation) 어셈블(Assembling) 링크(Linking) 빌드안에 컴파일이랑 링크가 속해있는 것으로 보면 된다. 사람마다 전처리,컴파일,어셈블전체를 컴파일로 불러서 빌드 단계를 두 단계로 보는 경우도 있다. 컴파일 링크 컴파일(Compile)이란? 컴파일러가 전처리기가 처리해준 소스 코드를 이용해서 어셈블리어로 바꿔주는 과정을 말한다. 어셈블리어는 기계어와 1:1로 대응이 되는 언어로 하드웨어에 가까운 언어이다. 어셈블리어를 기계어라고 부르기에는 조금 .. 2023. 2. 15.
[C언어]인클루드 가드의 뜻과 사용법(헤더가 꼬일 때,업계표준) 헤더파일(.h) 파일은 주료 함수선언과 전역변수 extern선언할 때 주로 들어간다. (물론 #define 같은 매크로도 들어간다.) 그리고 #include는 저번 글처럼 복사 붙여 넣기(확장)해주는 매크로이다. 헤더파일에 #define 같은 매크로를 다른 헤더파일에서도 사용을 해야 할 일이 있을 때, 양쪽 헤더 파일에 인클루드를 할 때가 있다. 예시코드 파일 3개를 보자 #include "b.h" /* 코드 내용 생략 */ 파일1 a.h #include "a.h" /* 코드 내용 생략 */ 파일 2b.h #include "a.h" int main(void) { /* 코드 내용 생략 */ return 0; } 파일 3 c.c 여기서 c.c 파일을 컴파일하게 되면 어떻게 될까? #include "a.h"에.. 2023. 2. 15.
[C언어]#include <> 와 #include " " 차이 C언어를 배우면 "Hello world"를 출력하는 것을 먼저 배운다. 이때, 출력을 하려면 출력헤더파일인 stdio.h를 인클루드 해야 한다. 이런 식으로 말이다. #include int main(void) { printf("hello world"); return 0; } 코드 1 #include 사용할 때 이때 #include 이런 방식을 쓴다. 그리고 어떨 때는 #include ""로 작성도 하는 코드를 볼 수 있다. #include "calculate.h" int main(void) { /* 코드 내용 생략 */ return 0; } 코드 2 #include "" 사용할 때 이때 두 개 코드의 차이점은 무엇일까? 사실 #include 와 #include ""는 둘 다 같은 용도로 쓰인다.(복붙 하.. 2023. 2. 15.
[C언어]암시적 형변환 C99표준(size_t(=unsigned int) 와 int 연산할 때 형변환포함) 이전 글에서 size_t 자료형 사용할 때 주의점을 적었었는데, 왜 unsigned 자료형과 signed 자료형을 연산할 때 unsigend로 변하는지 C99표준에 기반하여 설명하고 size_t(=unsigned int)와 int연산할 때 형변환 예시를 알려주겠다. 암시적 형변환은 대부분 자료형 크기가 작은쪽이 큰쪽으로 이동한다고 알고있다. 정수형 타입의 순위 char < short < int < long 실수형 타입의 순위 float < double < long double 대략적으로 보면 이렇게 되지만 같은 정수 자료형에서의 signed와 unsigned로 계산을 하면 어떻게 형변환이 이루어 지는 지도 알아 보겟다. C99표준에서 형변환 순서 하나의 피연산자가 long double형 이면 다른 피연산.. 2023. 1. 13.