【问题标题】:Define preprocessor value when value not defined未定义值时定义预处理器值
【发布时间】:2014-03-26 19:18:18
【问题描述】:

有时我会看到 define 预处理器,但没有分配给它的值。例如:

#define VAR

当没有指定值时,分配给VAR的是什么?

我也在读一段文字,我看到了:

#ifndef ERROR_FUNCTIONS_H
#define ERROR_FUNCTIONS_H

/* Error diagnostic routines */

void errMsg(const char *format, ...);

#ifdef __GNUC__

    /* This macro stops 'gcc -Wall' complaining that "control reaches
       end of non-void function" if we use the following functions to
       terminate main() or some other non-void function. */

#define NORETURN __attribute__ ((__noreturn__))
#else
#define NORETURN
#endif                  

ERROR_FUNCTIONS_H 是头文件吗?或者这只是define 预处理器定义的常量?

【问题讨论】:

  • #define VAR 有一个空字符串作为其替换值。可以测试是否设置。如果它出现在defined(或#ifdef#ifndef)以外的上下文中,则它将被替换为空。 NORETURN 宏是一个示例,说明当编译器不是 GCC(或不声称是 GCC——注意 clang)时,替换文本什么都不是。

标签: c c-preprocessor


【解决方案1】:

它只是“定义”的,所以你可以像#ifdef ERROR_FUNCTIONS_H这样进行检查

如果你有

 #define ERROR_FUNCTIONS_H

你可以稍后做:

#ifdef ERROR_FUNCTIONS_H
 //do something
#endif 

#ifdef 中的代码将被编译。

ERROR_FUNCTIONS_H 不是头文件。它只是一个#define 供预处理器使用。

你的例子中有什么:

#ifndef ERROR_FUNCTIONS_H
#define ERROR_FUNCTIONS_H

通常放在 .h 文件的顶部,以确保它只包含一次,这样您就不会得到多个定义。

【讨论】:

  • 谢谢@edtheprogrammerguy...你确定你的答案吗? xd6_错了吗?
  • 我确定。如果(s)他说ERROR_FUNCTIONS_H 是一个文件,xd6_ 是不正确的。它是预处理器的#define。 error_functions.h 是文件。
猜你喜欢
  • 2014-02-12
  • 2011-03-16
  • 2018-02-10
  • 1970-01-01
  • 2017-11-08
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 2018-12-18
相关资源
最近更新 更多