2

Windows で mingw を使用して、C およびアセンブリでコードをコンパイルしています。いくつかの関数には、fastcall 呼び出し規約 (Microsoft が定義しているように) があります。宣言で __fastcall を使用すると、mingw は Windows と同じように名前を装飾します。

アットマーク (@) は名前の前に付けられます。パラメーター リスト内のアット マークの後にバイト数 (10 進数) が名前の末尾に付けられます。

これはうまくいきます。アセンブリに次の形式のラベルがあります。

.global @myfunction@4
@myfunction@4:
    ....code....

しかし、Linux (x86、32 ビット) に移植する場合、これは大きな問題であることがわかります。Gcc は突然 __fastcall (または __cdecl) を好まなくなり、ラベルの @ をまったく好まなくなりました。Linux で gcc を取得して @ を好きにするか、Windows で mingw を取得して @ を追加しないかのどちらかです。

また__attribute__(__cdecl__)、代わりに使用できます__cdeclが、どこに行くのか戸惑っています。関数名自体の前に仮定しましたが、宣言の後、セミコロンの前に置く人を見かけます。どちらでもいいですか?

4

1 に答える 1