Ошибка 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
Я не могу изменить эти функции, так как они являются частью "Microsoft Excel Developer's Kit, Version 14", в файле FRAMEWRK.H:
///***************************************************************************
// 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 ответа
РЕДАКТИРОВАТЬ Примечание: этот ответ (и все похожие на него ответы) является технически неправильным, как указано в комментариях ниже. Я не удаляю его, чтобы мы не потеряли комментарии. (КОНЕЦ РЕДАКТИРОВАНИЯ)
Добавьте к нему два подчеркивания, например: __cdecl
Это соглашение о вызовах по умолчанию для программ на C и C++. Поместите модификатор __cdecl перед переменной или именем функции
Компилятору дано указание использовать соглашения об именах и вызовах C для системной функции:
// Example of the __cdecl keyword
_CRTIMP int __cdecl system(const char *);
Смотрите здесь документацию по cdecl в Microsoft.