簡體   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