汇编代码不应与普通代码混合
8.47 ID_mixedAsm
汇编代码的格式由实现定义,不具备可移植性,且可读性较差,故不应与普通代码混合。
如果条件允许,应使用汇编语言实现独立的库,再由 C/C++ 代码调用。
示例:
int avg(int a, int b) {
int sum;
__asm { // Non-compliant
mov eax, a
mov ebx, b
lea eax, [eax + ebx]
mov sum, eax
}
return sum / 2; // Non-compliant
}
例中 avg 函数同时含有汇编代码和 C 代码是不符合要求的,至少应将汇编代码单独隔离成一个函数,如:
int add(int a, int b) {
__asm { // Compliant
mov eax, a
mov ebx, b
lea eax, [eax + ebx]
}
}
int avg(int a, int b) {
int sum = add(a, b); // Compliant
return sum / 2;
}
依据
ISO/IEC 9899:1999 J.5.10-implementation
ISO/IEC 9899:2011 J.5.10-implementation
ISO/IEC 14882:2003 7.4(1)-implementation
ISO/IEC 14882:2011 7.4(1)-implementation
参考
MISRA C 2004 2.1
MISRA C 2012 Dir 4.3
MISRA C++ 2008 7-4-3