我有类似的来源:
...
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。
答案 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)
时才会有效。
修改强>
由于你想跳过整个功能,这里是黑客:
请您的开发人员将所有asm
函数移到源文件的底部。
添加预处理器asm /*
确保源文件以/***EOF**/
P.S。如果你不执行这些功能,我不确定功能不会受到影响。