繁体   English   中英

C ++ EOF命名空间

[英]C++ EOF namespace

因此,为了好奇,为什么EOF没有定义命名空间? 为什么不:: EOFstd :: 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如何工作,您应该看到为什么::EOFstd::EOF产生编译器错误。 #define宏是简单的文本替换,因此::EOF扩展为::-1std::EOF扩展为std::-1 ,这两者都是无效的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM