// Foo.h #ifndef FOO_H #define FOO_H typedef struct foo_tag { int hoge; #if defined(USE_FUGA) int fuga; #endif int uhyo; } Foo; #endif//FOO_H
// IncUhyo.cpp #include "Foo.h" void incUhyo(Foo* foo) { ++foo->uhyo; }
// Main.cpp #include <stdio.h> #include "Foo.h" void incUhyo(Foo* foo); int main(int argc, char* argv[]) { Foo foo; int i; foo.uhyo = 0; for(i = 0; i < 10; ++i) { incUhyo(&foo); printf("%d\n", foo.uhyo); } return 0; }
察しのいい方はここまででなにが起こったか想像がつくかと思いますが。
どこかで。
g++ -c -DUSE_FUGA IncUhyo.cpp
また別のどこかで。
g++ -c Main.cpp
それらをリンク。
g++ Main.o IncUhyo.o
実行。
$ ./a.out 0 0 0 0 0 0 0 0 0 0
値が変わらない!
今日、仕事でこういったことが原因の不具合に遭遇しました。
そんなわけで、わたしはコンパイルスイッチがきらいです。