전 처리기 지시문을 사용하여 C에서 함수 매크로를 정의하고 있습니다. 함수 매크로에서 여러 if/else if 문을 사용할 수 있습니까?전 처리기 다중 if/else if 문을 사용하여 함수 매크로를 정의하는 지시문
예인 경우 어떻게 작성합니까?
#define WRITE(str,id) #str(id)
// HERES where I am having difficulty
#define DRAW_GENERIC_WINDOW(windowID, type) if type==1 WRITE(draw_text,windowID) else if type==2 WRITE(draw_image,windowID) else if type==3 WRITE(draw_hyperlink,windowID)
// usage
DRAW_GENERIC_WINDOW(112, 1);
DRAW_GENERIC_WINDOW(178, 2);
DRAW_GENERIC_WINDOW(988, 3);
// At compile time the above should be converted to...
draw_text(112);
draw_image(178);
draw_hyperlink(988);
나는 하나를 수행하는 방법을 알고있는 경우 다른 함수 매크로 문하지만/사람의 경우 경우 여러 방법으로 할 수 있습니다 : 당신은 왜 "하기 전에 :
// if else eg
#define DRAW_GENERIC_WINDOW(windowID, type) ((type)==(1))?WRITE(draw_text,windowID):WRITE(draw_image,windowID)
주 도대체 당신이 이런 식으로 프로그래밍하고 있니? " : P는 4dm이라는 C와 매우 비슷한 언어로 작성 되었기 때문에 구조체, 포인터 또는 새로운 데이터 형식을 선언 할 수있는 기능이 없다는 점만 다릅니다. 그래서 가상 함수의 일부 형식을 달성하기 위해 전 처리기 지시문에 의존해야합니다 (이미지, 하이퍼 링크 등의 유형을 모르는 경우 사용됨).
if-else-if-else-if ... 원하는만큼 매크로를 확장 할 수 있어야합니다. 주목 : 나는 DRAW_GENERIC_WINDOW() 확장을 디버깅하는 것이 아니라, 다스 개 이상의 절을 그릴 때 특히 유용합니다. – WhozCraig
파운드 앞에 "#"문자가 나오는 이유는 무엇입니까? #define WRITE (str, id) str (id) #define WRITE (str, id) str (id) – imreal