#include <stdio.h>
#define PRINT(str) printf("출력:"#str)
int main() {
PRINT(안녕);
return 0;
}
#은 매크로 함수에서 인수 앞에 쓸 수 있으며, 인수의 값을 문자열로 바꾸는 기능을 합니다.
여기서 str이 안녕으로 변해 "출력:"#안녕이 되고 이게 문자열로 변환돼서 "출력:""안녕" 즉, "출력:안녕"이 됩니다.
##은 양옆 값 사이에 위치하며 두 값을 합치는 기능을 합니다.
#include <stdio.h>
#define PRINT2(a,b) printf(a##b)
int main() {
PRINT2("안녕", "잘가");
return 0;
}
a, b가 안녕,잘가로 바뀌고 두 개가 합쳐져 안녕잘가가 됩니다. 여기서 ##가 빠지면 a, b가 아니라 ab 단일 문자가 돼서 a, b로 인식하지 않습니다. 그리고 합칠 때 공백이 지워지기 때문에 a ## b도 뜻이 같습니다.
\은 한 줄의 식을 여러 줄로 쓸 때 사용합니다.
#define HELLOBYE "안녕 \
잘가"
const char* hellobye = HELLOBYE;
여기서 주의해야 될 점은 표시가 저렇게 되어 있지만 실제로 치환할 때는 줄바꿈이 무시됩니다. 그래서
const char* hellobye = "안녕 잘가";가 됩니다.