以下のコンパイル エラーを理解できません。
最初のファイルはヘッダーですtest_weak.h
。
#ifndef TEST_WEAK_H
#define TEST_WEAK_H
#ifndef __ASSEMBLER__
const char* const TUTU __attribute__((weak)) ="TUTU";
const char* TUTU_DATE __attribute__((weak)) = __DATE__;
const char* const tutu ="tutu";
#endif /*ASSEMBLER*/
#endif /*TEST_WEAK_H*/
2 番目のファイルがメインtest.cpp
です。
int main ()
{
return 42;
}
コンパイルするには、次を実行します。g++ -include test_weak.h test.cpp -o test
コンパイル結果は次のとおりです。
In file included from <command-line>:0:0:
./test_weak.h:5:44: error: weak declaration of ‘TUTU’ must be public
テスト ソース ファイルの cpp 拡張子を c 拡張子に置き換え、g++ の代わりに gcc を使用することで、このコードを正常に実行できます。また、weak 属性を削除するか、2 番目の const を削除することで、このエラーを修正することもできます。そうです、コンパイルエラーを修正することはできますが、ここで問題の理由を理解することはできません。
たとえば、次の行は問題なくコンパイルされます。
const char* TUTU __attribute__((weak)) ="TUTU";
const char* const
c++ で + weak 属性を使用できないのはなぜですか?