我在一個項目中製作一個剖析器,並且我想讓它易於集成到我的項目中。我在/ GH/Gh編譯器標誌中使用了penter和pexit,因此每次調用或返回函數時都會調用這些函數。現在,基本上我需要在我的項目中完成的工作是在全局範圍內的任何地方複製plite和pexit函數,並且工作正常,但我想創建一個宏,因此它基本上只是插入函數。我的Profiler.h文件並將其包含在我的其他項目中。我得到的錯誤是用於penter和pexit的Visual Studio宏
error C2598: linkage specification must be at global scope
error C2601: '_pexit' : local function definitions are illegal
error C1075: end of file found before the left brace '{' at 'path/main.cpp' was matched
注意「路徑/ main.cpp的」是一個漫長的道路,以我的項目(非探查項目),並主要是在那裏我「叫」宏
這裏是我的宏,我必須理解這些錯誤。我估計它剛剛插入的功能它被「叫」
#define PENTER \
extern "C" void __declspec(naked) _cdecl _penter(void) \
{ \
_asm push ebp; \
_asm mov ebp, esp; \
_asm pushad; \
Profiler::GetInstance().Enter(); \
_asm popad; \
_asm mov esp, ebp; \
_asm pop ebp; \
_asm ret; \
} \
#define PEXIT \
extern "C" void __declspec(naked) _cdecl _pexit(void) \
{ \
_asm push ebp; \
_asm mov ebp, esp; \
_asm pushad; \
Profiler::GetInstance().Exit(); \
_asm popad; \
_asm mov esp, ebp; \
_asm pop ebp; \
_asm ret; \
} \
感謝您的幫助!
查看此前的代碼,包括在此之前包含#included的任何.h文件。有一個}失蹤。 –
我將我的宏複製到它們被調用的相同位置,它可以工作,沒有問題,而且不會改變任何其他地方 – user2013535