グローバルスコープで実行したいコードがあります。だから、私はこのようなコンパイル単位でグローバル変数を使用することができます。グローバルスコープでコードを実行するための標準的な方法はありますか?
int execute_global_code();
namespace {
int dummy = execute_global_code();
}
事は、このコンパイル単位は、静的ライブラリ(または-fvisibility=hidden
と共有1)で終わる場合、リンカはに決めることができるということですdummy
を使用しないで削除し、グローバルコードを実行してください。
特定のコンパイラ(プラグマのインクルード)、コンパイルユニットの場所(属性の可視性の既定値)、周囲のコード(具体的には、dummy
のコードを自分のコードに入れて使用することができます。 )。
質問は、execute_global_code
は関係なく、コンパイル単位の配置(実行ファイルまたはLIB)の動作する1つのマクロに収まるように実行されることを確認するための標準的な方法はありますか?つまり、標準的なC++のみであり、そのマクロの外側にユーザコードはありません(dummy
のmain()
のような)
関連する? http://stackoverflow.com/a/11336506/5265292 – grek40
あなたの説明では、問題に対するさまざまな解決策の可能性を排除しました。なぜあなたは 'dummy'を初期化するコードが一つのマクロに収まる必要があると主張していますか? – Peter
@Peterそうでなければ、 "メインのダミー"のダミー使用が解決策になるからです。重要な点は、明示的な初期化コードでライブラリユーザーに負担をかけたくないということです。 –