Ошибка cdecl: ожидаемый инициализатор перед - PullRequest
3 голосов
/ 06 января 2012

У меня проблема с соглашением о вызовах 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 ]

1 голос
/ 06 января 2012

Это соглашение о вызовах по умолчанию для программ на C и C ++.Поместите модификатор __cdecl перед переменной или именем функции

Компилятору дано указание использовать соглашения об именах и вызовах C для системной функции:

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

См. здесь для документации cdecl в Microsoft.

1 голос
/ 06 января 2012

РЕДАКТИРОВАТЬ Примечание: этот ответ (и все похожие на него ответы) является технически неверным, как показывают комментарии ниже. Я не удаляю его, чтобы мы не потеряли комментарии. ( Конец редактирования )

Добавьте к нему два подчеркивания, например: __cdecl

...