C 正在查找预处理器命令以删除代码中的命令
我正在开发一个C库,它有时使用C 正在查找预处理器命令以删除代码中的命令,c,c-preprocessor,bcc-compiler,C,C Preprocessor,Bcc Compiler,我正在开发一个C库,它有时使用 static inline void myfunc(...) 定义函数时 现在,我尝试将其移植到不支持“静态内联”的旧C编译器。这是bcc-Bruce的C编译器 我可以在头文件中使用命令替换 static inline void 与 在包含此头文件的所有程序中?当您必须针对不支持某些功能的编译器时,通常在代码中使用宏,而不是试图用宏修改代码 在这种情况下,您可以以依赖于编译器的方式定义STATIC\u INLINE宏,并按如下方式使用它: #ifdef BC
static inline void myfunc(...)
定义函数时
现在,我尝试将其移植到不支持“静态内联”的旧C编译器。这是bcc-Bruce的C编译器
我可以在头文件中使用命令替换
static inline void
与
在包含此头文件的所有程序中?当您必须针对不支持某些功能的编译器时,通常在代码中使用宏,而不是试图用宏修改代码 在这种情况下,您可以以依赖于编译器的方式定义
STATIC\u INLINE
宏,并按如下方式使用它:
#ifdef BCC_COMPILER
#define STATIC_INLINE
#else
#define STATIC_INLINE static inline
#endif
...
STATIC_INLINE void myfunc(...)
非常感谢大家的帮助。我必须报告在他的报告中给出了对我有用的答案:
显然,bcc接受
static void
但不接受static inline void
我认为您可以添加一个空的void定义:#定义void。您确定要重新定义void
关键字而不是inline
关键字吗?另外,请查看搜索和阅读有关条件编译的内容。很抱歉,这是一个输入错误-我想用“void”替换“static inline void”,这将起作用,但我已经在代码中包含了很多ifdef。我希望用#define命令或类似命令在一个地方定义它会更短。我现在明白了,是的,您可以将此代码放入头文件中。可以让预处理器用空字符串替换“静态内联”吗?这样我就不必更改每一个程序代码了。@Georg不幸的是,预处理器可以替换单个标记,而不是相邻出现的一对标记。这就是为什么我见过很多库使用这个技巧,尽管它会降低其余代码的可读性。你真的想从静态内联
中丢失静态
?您突然暴露了所有函数,并且容易出现多个定义错误。如果编译器不支持内联
,#define inline/*nothing*/
可能更好。(当然,如果以前是静态内联
的函数现在只是静态
,但没有使用,您可能会收到关于未使用函数的警告,或者因为它们或两者而遭受代码膨胀。)一种更简单的表达方式是“Bcc不支持内联
函数”。即使在C90编译器中,也需要对静态
和无效
的支持<代码>内联已添加到C99。
#ifdef BCC_COMPILER
#define STATIC_INLINE
#else
#define STATIC_INLINE static inline
#endif
...
STATIC_INLINE void myfunc(...)
#define inline