我遇到了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,Version 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);
...
答案 0 :(得分:1)
编辑注意:此答案(以及与之类似的所有答案)在技术上是不正确的,如下面的评论所示。我没有删除它,所以我们不会丢失评论。 ( END EDIT )
在前面加上两个下划线,如:__cdecl
答案 1 :(得分:1)
这是C和C ++程序的默认调用约定。将__cdecl修饰符放在变量或函数名称
之前指示编译器对系统函数使用C命名和调用约定:
// Example of the __cdecl keyword
_CRTIMP int __cdecl system(const char *);
有关Microsoft的cdecl文档,请参阅here。