.oファイルをリンクするだけで関数を呼び出す方法はありますか?
例えば:
foo.cpp:
extern int x;
void f() { x = 42; }
struct T { T() { f(); } } t; // we use constructor of global
// object to call f during initialization
bar.cpp:
#include <iostream>
int x;
int main()
{
std::cout << x;
}
コンパイル/リンク/実行するには:
$ g++ -c foo.cpp
$ g++ -c bar.cpp
$ g++ foo.o bar.o
$ ./a.out
42
これはgcc4.7で動作するようです。期待通り42を出力します。ただし、一部の古いコンパイラでは、foo.oを実際に「使用」していないため、リンク時に最適化されるというこのパターンの問題が発生したことを覚えています。(おそらく、この特定の例は、何らかの理由で問題を表していない)
C ++ 11標準はこのパターンについて何と言っていますか?動作することが保証されていますか?