【问题标题】:GCC defines to VSGCC 定义为 VS
【发布时间】: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


【解决方案1】:

@kusma 已经指出 GCC 和 MSVC 有不同的内联 asm 语法。

此外,MSVC for x64 根本不支持内联 asm!

但这对您来说可能不是一个严重的问题,因为我们可以在 x64 Windows 上运行 x86(32 位)程序。配置 VC++ 项目时要小心。

还要注意它们有不同的名称装饰规则。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 2011-11-21
    • 2012-12-04
    • 2016-08-20
    • 2012-05-29
    • 2016-06-22
    • 1970-01-01
    相关资源
    最近更新 更多