2017-01-01 128 views
2

删除命令我上定义一个函数时,有时会使用寻找预处理命令代码

static inline void myfunc(...) 

一个C库工作。

现在我尝试将此端口移植到不支持“静态内联”的旧C编译器。这是密件抄送 - 布鲁斯的C编译器。

我可以在替代

static inline void 

void 
在包括这个头文件的所有程序

头文件使用一个命令?

+3

我想你可以添加一个void的空定义:#define void。 –

+0

您确定要重新定义'void'关键字而不是'inline'关键字吗?另外请查找并阅读*条件编译*。 –

+0

对不起,这是一个错字 - 我想用“void”替换“static inline void” – Georg

回答

5

当您必须针对不支持某些功能的编译器时,通常在您的代码中使用宏而不是试图用宏修改您的代码。

在这种情况下,你可以在编译器相关的方式定义STATIC_INLINE宏,并使用它像这样:

#ifdef BCC_COMPILER 
#define STATIC_INLINE 
#else 
#define STATIC_INLINE static inline 
#endif 
... 
STATIC_INLINE void myfunc(...) 
+0

这会起作用,但我已经在代码中有很多ifdef了。我希望用一个#define命令或类似的命令在一个地方定义它会更短。 – Georg

+0

我现在明白了,是的,你可以把这段代码放到头文件中。是否有可能让预处理器用空字符串替换“静态内联”?然后我不必更改每个程序代码。 – Georg

+1

@Georg不幸的是,预处理器可以替代一个令牌,而不是一对彼此相邻的令牌。这就是为什么我见过的许多库使用这个技巧,尽管它使得其余的代码不易读。 – dasblinkenlight

1

非常感谢所有的帮助。我必须向大家报告,BLUEPIXY了,在他comment工作对我的回答:

#define inline 

显然BCC不接受static void但不static inline void

+1

更简单表达方式是'Bcc不支持'内嵌'功能'。即使在C90编译器中也需要支持'static'和'void'; 'inline'被添加到C99。 –