C언어 > 전처리기 - #, ##

TODAY194 TOTAL2,275,303
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | C언어 | C언어 | 전처리기 - #, ##

페이지 정보

작성자 키트 작성일2017-09-12 13:39 조회1,118회 댓글0건

본문

 

#과 ##은 전처리기의 연산자로서 #define 전처리 과정에서만 사용하는 특수한 연산자이다. 사용 빈도가 높지는 않지만 잘 알아 두면 매크로의 활용도를 높여 반복되는 코드를 간단하게 작성할 수 있다.

Stringizing Operator - #
#define문의 인수 앞에 사용되며 피연산자를 문자열로 바꾸는 역할을 한다. 피연산자가 실인수로 치환된 후 양쪽에 따옴표를 붙여 치환된 결과 그대로 문자열 상수가 된다.

#define result(exp) printf(#exp" = %d\n",exp);

 

 

 

void main()

{

     result(5*3);

     result(2*(3+1));

}

결과는 
5*3 = 15
2*(3+1)  = 8

Merge Operator - ##
#define 문 내에서만 사용되며 형식 인수 사이에 위치한다. 형식 인수를 분리하여 각각 치환되도록 하며 치환 후에는 주변의 공백과 함께 사라져 두 인수의 치환 결과가 하나의 토큰으로 연결될 수 있도록 한다.

#define var(a,b) (a##b)

 

 

 

void main()

{

     int var(Total, Score);

     TotalScore=256;

     printf("총점 = %d\n",TotalScore);

}


이해를 위해 또 다른 예제를 보면...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/#include <iostream>
 
//make function factory and use it
#define FUNCTION(name, a) int fun_##name() { return a;}
 
FUNCTION(abcd, 12);
FUNCTION(fff, 2);
FUNCTION(kkk, 23);
 
#undef FUNCTION
#define FUNCTION 34
#define OUTPUT(a) std::cout << #a << std::endl
 
int main(){
    std::cout << "abcd: " << fun_abcd() << std::endl;
    std::cout << "fff: " << fun_fff() << std::endl;
    std::cout << "kkk: " << fun_kkk() << std::endl;
    std::cout << FUNCTION << std::endl;
    OUTPUT(million);               //note the lack of quotes
 
    return 0;
}
Output:
 
abcd: 12
fff: 2
kkk: 23
34
million




특수한(자주 사용되지 않는) 문법은 구지 알지 않아도 됩니다.
다른 사람이 사용한 경우 분석하기 위해서는 알아야겠지만

가급적 쉬운 문장으로 코드를 작성하는 것이 좋습니다. 

댓글 0

조회수 1,118

등록된 댓글이 없습니다.

C언어HOME > C언어 > C언어 목록

게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기