【发布时间】:2014-04-01 10:07:01
【问题描述】:
我有以下代码在 GCC 下编译,但在尝试在 Visual Studio 下编译时抛出错误“预期标识符”。
#define CALLING_CONVENTION WINAPI
#define PROXY_PROTOTYPE(FUNCTION_NAME) \
void (FUNCTION_NAME)(void)
#define PROXY_FUNCTION(FUNCTION_NAME) \
static CALLING_CONVENTION PROXY_PROTOTYPE(*_##FUNCTION_NAME) = NULL; \
CALLING_CONVENTION PROXY_PROTOTYPE(FUNCTION_NAME) { \
POP_EBP __asm__("jmp *__"#FUNCTION_NAME); \
}
#define CALL_FUNCTION(FUNCTION_NAME) \
static CALLING_CONVENTION FUNCTION_NAME##_(*_##FUNCTION_NAME) = NULL; \
CALLING_CONVENTION FUNCTION_NAME##_(FUNCTION_NAME)
#define CALL_FUNCTION2(FUNCTION_RET, FUNCTION_NAME, FUNCTION_ARGS, ...) \
static CALLING_CONVENTION FUNCTION_RET (*_##FUNCTION_NAME)(FUNCTION_ARGS) = NULL; \
CALLING_CONVENTION FUNCTION_RET FUNCTION_NAME(FUNCTION_ARGS)
PROXY_FUNCTION(origFunc)
显然编译器及其对定义的解释存在差异,但我不知道如何为 VS 更正它。我试过查找错误,但它太笼统了,看起来可能是很多东西。 任何帮助表示赞赏。
【问题讨论】:
-
您确定问题不在于 asm 语法吗? GCC 和 MSVC 对内联汇编有完全不同的语法...
标签: c visual-studio-2012 gcc c-preprocessor