11

以下のコンパイル エラーを理解できません。

最初のファイルはヘッダーです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* constc++ で + weak 属性を使用できないのはなぜですか?

4

2 に答える 2