gcc 4.7.2 に基づく CodeSourcery g++ lite を使用して MCU 用にプログラムしてい
ます。特定のアドレスにある周辺オブジェクトを定義したいと考えています。そのため、constexpr 指定子で参照を使用しようとしています。
例えば:
typedef int& int_ref;
constexpr int_ref i = *(int*)0;
そのコードをヘッダーに入れてプログラムをコンパイルすると、次のような診断が表示されます。
xx1.o:(.rodata.i+0x0): multiple definition of `i'
...
xxx.o:(.rodata.i+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
constexpr int i = 5
コンパイラとうまくいっているので
、それは私を混乱させます。
もちろん、別の解決策もあります
。 1.ヘッダーを含むすべての .c/.cpp ファイルを汚染する
マクロ 。#define i *(int*)0
現在、マクロを使用しています。
2. 静的オブジェクトstatic constexpr int_ref i = *(int*)0;
。いくつかのコンパイラ オプション (-fdata-sections) がないと、コンパイラは未使用のオブジェクトを削除できず、多くのスペースが無駄になります。
これを行うより良い方法はありますか?