cdecl错误:之前的预期初始化程序

时间:2012-01-06 12:02:55

标签: c++ c calling-convention cdecl

我遇到了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);
...

2 个答案:

答案 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