本文介绍了是否#IFDEF(或其他preprocessor指令)工作函数声明(要测试功能的存在)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
为什么不以下code按预期方式工作?
无效foobar的(INT);的#ifndef FOOBAR
的printf(FOOBAR存在);
#万一
它的总是的打印信息;它显然不能检测功能的存在作为一个实体。 (它是一个过载的问题?)
为什么不能够 #IFDEF
(或其变体)检测函数声明?声明应可于pre-处理,所以它应该工作,不应该吗?如果没有,是否有替代或变通?
解决方案
The pre-processor operates before the compilation (hence the "pre") so there are no compiled symbols at that point, just text and text expansion. The pre-procesor and the compiler are distinctly separate and work independantly of each other, except for the fact that the pre-processor modifies the source that is passed to the compiler.
The typical pattern to doing something like with the pre-processor is to pair the function declaration with the function usage using the same define
constant:
#define FOO
#ifdef FOO
void foo(int);
#endif
#ifdef FOO
printf("foo exists");
#endif
这篇关于是否#IFDEF(或其他preprocessor指令)工作函数声明(要测试功能的存在)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!