我有一个 IAR 项目,其中的部分根据预处理器符号进行编译。对于堆栈使用预测,我需要一个 #pragma calls
指令列出可能通过函数指针调用的所有函数的名称,并且在那里引用不存在的函数是错误的。
有没有办法在这里传递正确的函数列表,因为 #pragma
和 #ifdef
是互斥的?
最佳答案
如果 #pragma calls
在其参数中扩展宏,一种可能性是为您想要有条件地包含的每组函数定义一个宏:
#if CND1
#define CND1_FUNS fun1_1 fun1_2
#else
#define CND1_FUNS
#endif
#pragma calls CND1_FUNS
另一种方法是使用 C11 中的 _Pragma
,它不是预处理指令,因此不会干扰 #ifdef
:
_Pragma ( "calls"
#ifdef CND1
"fun1_1 fun1_2"
#endif
)
关于c - "#pragma calls"和条件编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33832491/