본문 바로가기

컴퓨터/프로그래밍 언어8

가변 인자 매크로 매크로 함수에서 가변인자를 쓸수가 있다.... 와 __VA_ARGS__ 를 사용할 수 있다.#define TRACE(...) printf(__VA_ARGS__) 와 같이 선언할 수 있다.사용 예는 아래와 같다. TRACE("menu","follow", Type");TRACE("menu","follow"); 2014. 5. 10.
do while(0) 문을 쓰는 이유. 그냥 매크로 여러줄을 선언할 것을 왜 do while(0) 문 안에 넣어서 지정하는 것일까? 그 이유는 간단히 설명하면 아래와 같다. '다중 구문의 매크로함수 전체가 도중에 멈추지 않고 실행되게 하기 위해서이다.' 무슨 말이냐 하면 아래의 코드를 보면 이해 할 것이다. 1. 정의된 매크로#define FOO(x) \printf("arg is %s\n", x);\do_something_useful(x); 2. 사용 예if(blah == 2)FOO(blah); 3. 실제 내용if(blah == 2)printf("arg is %s\n", blah);do_something_useful(blah); 4. 수정된 매크로#define FOO(x) do {\printf("arg is %s\n", x);\do_somet.. 2014. 5. 10.
#if 1 또는 #if 0을 쓰는 이유 #if 1은 어차피 실행 되는데 왜 굳이 저렇게 쓰는가 하는 의문이 있다.그 이유는 2가지가 있다. 1. 불필요한 코드를 전처리기 단계에서 제거하여 컴파일 되는 코드 용량을 감소 시킨다. 2. 코드 흐름 중간에서 테스트 해보고자 하는 함수를 /* */ 문으로 주석 처리 할 경우, 주석을 제거하고 다시 잎히는 과정이 굉장히 번거롭다. 2014. 5. 9.
#define 뒤에 \를 붙이는 경우, 다중 줄로 #define을 선언하는 경우 #define 을 한 줄에 다 쓸수 없을 때\ 문자를 이용하여 다중 줄로 선언할 수 있다.단, 다중 줄로 선언할 경우 마지막 줄 에는 \ 문자를 붙이지 않는다. #define SWAP(A, B) \do {\temp = A;\B = A;\A = temp;\}while(0) 2014. 5. 9.