OSSプロジェクトでは良く見かけるifdef
自前のコードだと余り使わない子ですが、使い所はあります。
種類によって一行だけ違うコードがある場合、ifdefやif defineを使うと楽にいけます。
パターン1:ifdef
対象コード
#include <stdio.h> int main() { printf("yes\n"); #ifdef COORDINATOR printf("###coordinator###\n"); #endif #ifdef ROUTER printf("###router###\n"); #endif #ifdef ENDDEVICE printf("###enddevice###\n"); #endif return 0; }
結果
$ gcc ifdeftest.c -D"ENDDEVICE" -o ifdeftest.o $ ./ifdeftest.o yes ###enddevice### $ gcc ifdeftest.c -D"ROUTER" -o ifdeftest.o $ ./ifdeftest.o yes ###router### $ gcc ifdeftest.c -D"COORDINATOR" -o ifdeftest.o $ ./ifdeftest.o yes ###coordinator###
パターン2 #if define
if defineを使うと、elseifに相当するelifを使える事から少しスッキリします。
対象コード
#include <stdio.h> int main() { printf("yes\n"); #if defined COORDINATOR printf("###coordinator if###\n"); #elif defined ROUTER printf("###router elif###\n"); #elif defined ENDDEVICE printf("###enddevice elif###\n"); #endif return 0; }
結果
$ gcc ifelif.c -D"COORDINATOR" -o ifelif.o $ ./ifelif.o yes ###coordinator if### $ gcc ifelif.c -D"ROUTER" -o ifelif.o $ ./ifelif.o yes ###router elif### $ gcc ifelif.c -D"ENDDEVICE" -o ifelif.o $ ./ifelif.o yes ###enddevice elif###