エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

わたしはコンパイルスイッチがきらいです

// 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

値が変わらない!


今日、仕事でこういったことが原因の不具合に遭遇しました。


そんなわけで、わたしはコンパイルスイッチがきらいです。