4

cdecl 呼び出し規約に問題があります。

void Test1(char* str, ...)           // ok
{}

void cdecl Test2(char* str, ...)     // error: expected initializer before 'Test2'
{}

int main()
{}

コンパイラに cdecl 呼び出し規約を認識させるにはどうすればよいですか?

ありがとう!

プラットフォーム: Windows 7; MinGW; GCC 4.6.1


これらの関数は、ファイル FRAMEWRK.H の「Microsoft Excel Developer's Kit、バージョン 14」の一部であるため、変更できません。

///***************************************************************************
// File:        FRAMEWRK.H
//
// Purpose:     Header file for Framework library
//
// Platform:    Microsoft Windows
//...
// From the Microsoft Excel Developer's Kit, Version 14
// Copyright (c) 1997 - 2010 Microsoft Corporation. All rights reserved.
///***************************************************************************
...
// 
// Function prototypes
//

#ifdef __cplusplus
extern "C" {
#endif

void far cdecl debugPrintf(LPSTR lpFormat, ...);
LPSTR GetTempMemory(size_t cBytes);
void FreeAllTempMemory(void);
...
4

2 に答える 2

1

編集注:以下のコメントが示すように、この回答(およびそれに類似したすべての回答)は技術的に正しくありません。コメントを失わないように、削除しません。(編集終了)

次のように、先頭に 2 つのアンダースコアを追加します。__cdecl

于 2012-01-06T12:05:10.133 に答える
1

これは、C および C++ プログラムのデフォルトの呼び出し規約です。変数または関数名の前に __cdecl 修飾子を配置します。

コンパイラは、システム関数に C の命名規則と呼び出し規則を使用するように指示されています。

// Example of the __cdecl keyword
_CRTIMP int __cdecl system(const char *);

Microsoft の cdecl のドキュメントについては、こちらを参照してください。

于 2012-01-06T12:13:06.567 に答える