2012-01-06 8 views
3

前に期待される初期化子は私が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の開発者キット、バージョン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); 
... 

答えて

1

EDIT注意を:この回答(およびそれに似たすべての回答)は、以下のコメントが示すとおり、技術的に間違っています。私はそれを削除していないので、コメントを失うことはありません。 (END EDIT

前に付加それこのような2つのアンダースコア、と:__cdecl

+0

問題は、その機能が「Microsoft Excel Developer's Kit、バージョン14」(FRAMEWRK.H)の一部であることです。私はそれを変更するべきではないと思う。 –

+2

その場合、FRAMEWRK.HはGCCではなくMSVCで使用することを意図していたと思います。ヘッダファイルをインクルードする前に、 '#define cdecl __cdecl'のようなものを置くことができるかどうかを見てください。しかし、これはちょうど氷山の一角に過ぎないのではないかと心配しています。 –

+0

@MrLister:あなたは '#define cdecl __cdecl'と氷山についての権利を持っていました...今宣言されている宣言されていない関数(例えば' memcpy_s')についてはエラーが出ます。それらはグローバルであり、含まれており、パスが設定されています。 –

1

これは、CおよびC++プログラムのデフォルトの呼び出し規約です。変数や関数名

コンパイラがC・ネーミングを使用するように指示して、システムの機能のための規則を呼びかけている前__cdecl修飾子を置き:

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

は、マイクロソフトでCDECLのドキュメントについてはhereを参照してください。

+1

コードをコピーする場合は、ソースも記載する必要があります。http://msdn.microsoft.com/en-us/library/zkwh89ks(v=vs.71).aspx –

+0

Ok。私はそれを以前に忘れてしまったので、その部分を編集しています..すみません.. –

関連する問題