C のプリプロセッサでは文字列が扱えない
以下のコードはコンパイルが通らない。
#include <stdio.h> #define ABC "abc" //#define ABC 1 int main(int argc, char *argv[]) { #if ABC==ABC printf("ok\n"); #endif return 0; }
コンパイルエラーのメッセージは以下のような感じだ。
ppt_test.c:6:5: error: token ""abc"" is not valid in preprocessor expressions
よく考えたら、プリプロセッサで文字列を比較しようとした場合、割と壮大な処理(strcmp 相当)が必要なので、出来るはずがないということか。