[英]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.