C &引用#布拉格语叫;和条件编译

C &引用#布拉格语叫;和条件编译,c,c-preprocessor,iar,C,C Preprocessor,Iar,我有一个IAR项目,其中根据预处理器符号编译部件。对于堆栈使用预测,我需要一个#pragma calls指令,列出可能通过函数指针调用的所有函数的名称,在那里引用不存在的函数是错误的 有没有办法在此处传递正确的函数列表,因为#pragma和#ifdef是互斥的?如果#pragma calls在其参数中展开宏,一种可能是为要有条件包含的每一组函数定义一个宏: #if CND1 #define CND1_FUNS fun1_1 fun1_2 #else #define CND1_FUNS #endi

我有一个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中的
\u Pragma
,它不是预处理指令,因此不会干扰
\ifdef

_Pragma ( "calls"
#ifdef CND1
"fun1_1 fun1_2"
#endif
)

“<代码> > PrimaMa/代码>和<代码> > IFDEF <代码>是什么意思?“我不能在一行多行<代码>>PrimaM< <代码>中使用一个新的换行符,所以我不能轻易地从列表中删除单独的函数名。您的编译器是否支持C11中的
\u Pragma
(有几个例外在这里并不相关。)@JohnBollinger这就是为什么我说“取决于
#pragma调用
的工作方式。”让我澄清一下。