有没有办法从编译中排除asm函数?

时间:2016-03-09 07:25:46

标签: c visual-studio

我有类似的来源:

...
void func1 (uint8* p1) {
    ...
}

asm void asm_func (uint8* p_asm) {

    //asm code here
}

void func2 (uint8* p2) {
    ...
}
...

有没有办法从编译中排除asm函数?

此问题的真实情况:

开发人员团队使用允许此asm语法的编译器编写代码,测试人员团队正在使用其他编译器来测试代码 这不允许这种asm语法。

不允许Tester团队修改源代码,因此无法对无效的语法代码进行注释。

Tester团队使用Visual Studio。

3 个答案:

答案 0 :(得分:1)

您可以使用预处理器conditional compilation来完成此操作。如果设置了宏,则定义函数。

这样的东西
#ifdef HAVE_ASM_SUPPORT
asm void asm_func (uint8* p_asm) {

    //asm code here
}
#endif

在开发人员环境中,您定义了HAVE_ASM_SUPPORT,而测试人员将不会拥有它,并且编译器根本不存在该函数。

答案 1 :(得分:1)

AFAIK,使用这样的代码,你无法做你想做的事。

所有C编译器都允许条件编译...只要它在原始代码中是显式的。

必须能够使用asm跳过整个函数,或者如果有意义就跳过asm代码:

跳过整个功能

...
#ifndef SKIP_ASM
asm void asm_func (uint8* p_asm) {

    //asm code here
}
#endif
...

只需跳过asm代码:

#ifdef SKIP_ASM
#define asm
#endif
...
asm void asm_func (uint8* p_asm) {

#ifndef SKIP_ASM
    //asm code here
#endif
}
...

TL / DR:开发人员团队必须在原始代码中提供条件编译,或者必须使用编译器团队中接受相同asm语法的编译器。

答案 2 :(得分:0)

在visual studio IDE设置中添加如下所示的预处理器指令:

asm <blank>。每个处理器将用空白替换asm语句。

通过这种方式,你根本不需要修改源代码。

注意:仅当msvc能够运行void asm_func (uint8* p_asm)时才会有效。

修改

由于你想跳过整个功能,这里是黑客:

  1. 请您的开发人员将所有asm函数移到源文件的底部。

  2. 添加预处理器asm /*

  3. 确保源文件以/***EOF**/

  4. 结尾

    P.S。如果你不执行这些功能,我不确定功能不会受到影响。