#define 함수이름(인자) 치환할 것
#include <stdio.h>
#define square(x) x * x
int main()
{
printf("%d\n", square(3));
return 0;
}
컴파일 되기전에 전처리기에 의해 square(3)은 3 * 3으로 변한다.
#include <stdio.h>
#define square(x) x * x
int main()
{
printf("%d\n", square(3 + 1));
return 0;
}
3 + 1 * 3 + 1 이렇게 바꿔서 답이 7이 나온다.
#define square(x) (x) (x) 이렇게 묶어주면 (3 + 1) (3 + 1)이 되서 16이 나온다.
어떠한 인자 앞에 #을 붙이게 되면 이 인자를 문자열로 바꿔준다.
#include <stdio.h>
#define PrintVariableName(var) printf(#var "\n");
int main()
{
int a;
PrintVariableName(a);
return 0;
}
입력된 것을 하나로 합쳐준다.
#include <stdio.h>
#define AddName(x, y) x##y
int main()
{
int AddName(a, b);
ab = 3;
printf("%d \n", ab);
return 0;
}
#include <stdio.h>
__inline int square(int a) { return a * a; }
int main()
{
printf("%d", square(3 + 1));
return 0;
}
위에서 사용했던 매크로 함수처럼 사용되지만 우리가 보통 함수를 사용하는 것처럼 치환해준다.(컴파일러가 처리하기 때문에 좀 더 똑똑하다)
매크로 함수 : 3 + 1 3 + 1
인라인 함수 : (3 + 1) (3 + 1)
함수를 호출하고 리턴 받는 형태 < 직접 작업하는 비용
이 상태일때 치환하게 되지만 반대의 경우는 inline 키워드를 무시하게 된다.
(일반적인 함수처럼 쓰는듯?)
컴파일러에게 말하는 전처리기 명령
#prgma once
컴파일러로 하여금 이 파일이 오직 딱 한번만 include 될 수 있다고 해줌
#ifndef을 이용하는 것보다 컴파일 시간 절약가능
스트림은 두 개의 다른 장치들을 이어주는 통로
운영체제가 스스로 처리해준다.
ex)키보드로 입력해서 스트림을 통해서 모니터로 출력해준다.