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
が、どこに行くのか戸惑っています。関数名自体の前に仮定しましたが、宣言の後、セミコロンの前に置く人を見かけます。どちらでもいいですか?