c - "#pragma calls"和条件编译

标签 c c-preprocessor iar

我有一个 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/

相关文章:

c - 在结构中使用 typedef 枚举并避免类型混合警告

c - 分别打印粘合在一起的 2 个小绳子的最有效方法

objective-c - 预处理器宏和 BOOL 怪异

C预处理器编译异常时使用 "bitwise and"

c++ - #include <文件名> 和 #include "filename"有什么区别?

c - 使用一个编译器创建的静态 C 库是否与另一个兼容?

c - 使用strucs读取二进制文件的问题

c - 保存ftw函数的目录搜索结果

c - 什么是斐波那契偶数项之和(<400 万)? 【大值数据类型混淆】

c - 带有 IAR 插件的 Eclipse 索引器