1

なぜこれがうまくいかないのか誰か知っていますか?

void test() [[stdcall]] {
        std::cout << "Hello World" << std::endl;
}

C++11 方言でコンパイルしようとすると、次のように表示されます。

「警告: 'stdcall' 属性ディレクティブは無視されました [-Wattributes]」

何故ですか?stdcall 呼び出し規約が本当に必要な関数があります。GCC のデフォルトの呼び出し規約は cdecl です。助言がありますか?

4

1 に答える 1

4

以下が機能するはずです。

#include <iostream>
[[gnu::stdcall]]
void test()
{
  std::cout << "Hello World" << std::endl;
}

または、古い構文を使用できます__attribute__((stdcall))。Iでコンパイルするg++ -std=c++11 -m32と、警告が表示されません。

于 2014-05-10T00:21:52.603 に答える