본문 바로가기

C, C++

#, ##, \

#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 = "안녕 잘가";가 됩니다.

'C, C++' 카테고리의 다른 글

#undef  (0) 2019.12.16
조건 매크로  (0) 2019.12.15
#define  (0) 2019.12.12
#include  (0) 2019.12.11
함수 호출 규약  (0) 2019.12.10