在Ubuntu Linux 20.04机器上,在/usr/include/x86_64-linux-gnu/bits/resource.h
中,我看到这样的代码:
enum __rusage_who
{
/* The calling process. */
RUSAGE_SELF = 0,
#define RUSAGE_SELF RUSAGE_SELF
/* All of its terminated child processes. */
RUSAGE_CHILDREN = -1
#define RUSAGE_CHILDREN RUSAGE_CHILDREN
};
字符串
我们看到RUSAGE_SELF
被定义为自身,它的目的/好处是什么?
x1c 0d1x的数据
1条答案
按热度按时间x3naxklr1#
这在同一文件的评论中有解释。
字符串
所以它们只是用于
#ifdef
的功能测试。你还希望它们实际上可以用作(编译时)整数常量表达式。所以
#define RUSAGE_SELF
将不起作用,你必须使用#define RUSAGE_SELF RUSAGE_SELF
。上面注解的第一句话表明它很可能最初只是
#define RUSAGE_SELF 0
。实际上,例如this link包含行#define RUSAGE_SELF 0
。然而,尽管边界基于观点,但由于各种原因,将整数常量定义为宏不如使用枚举。有关详细信息,请参阅this question。(无论是在历史版本中还是在类似系统上的类似头文件中),有人会使用
#ifdef
测试它们是完全有道理的,在他们决定进行转换并将它们重写为枚举之后,他们需要确保这些遗留代码不会被更改破坏。