[英]C++ EOF namespace
因此,为了好奇,为什么EOF没有定义命名空间? 为什么不:: EOF或std :: EOF ?
#include <cstdio>
while (std::scanf("%s", someStr) != ::EOF); // nope
while (std::scanf("%s", someStr) != std::EOF); // nope
while (std::scanf("%s", someStr) != EOF); // here we go
EOF
是在<cstdio>
定义的预处理器宏(在C头<stdio.h>
中也可以从C ++中使用)。
在实际编译代码之前,预处理器宏对源代码执行文本替换。 因此,预处理器宏不是可以出现在任何命名空间中的名称。
这与标题中声明的函数名称不同,后者可以出现在名称空间中。
在C中,使用#define
EOF定义为宏 。 它可能被定义为const
,除了它早于const
。
为了兼容性,这意味着它也被定义为C ++中的宏。 就像是:
#define EOF -1
如果您知道#define
如何工作,您应该看到为什么::EOF
和std::EOF
产生编译器错误。 #define
宏是简单的文本替换,因此::EOF
扩展为::-1
, std::EOF
扩展为std::-1
,这两者都是无效的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.