我一直認爲,如果你做#include <cheader>
(其中header
就像STDIO/STDLIB /串一些標準C++頭),它是相同的是#include <header.h>
,但裹入std
命名空間。那麼代碼片段如何編譯(g ++ 4.7.3)?爲什麼使用<cheader>代替<header.h>?
#include <cstdlib>
int main()
{
malloc(1);
return 0;
}
爲什麼一個包括<cstdio>
然後(而不是<stdio.h>
)如果標準C函數將在全局命名空間呢?
而第二個問題是 - 我應該怎麼做才能一些功能進行全局命名空間的(同時使用C++頭文件在同一時間)?舉例來說,我不想malloc
是在全局命名空間,因爲我有一個家庭作業:寫我自己的內存分配器(特別是malloc
和free
功能),我會編譯成動態庫,並使用插入任何程序LD_PRELOAD
。
因爲不幸的是,實現*允許*名稱在'std ::'名稱空間之外,以及* required *在它們之內。 – juanchopanza
@juanchopanza但如果我們允許標準頭文件混淆全局名稱空間,那麼使用名稱空間'std'有什麼意義? – karlicoss
@ karlicoss!這就是爲什麼我認爲這是「不幸」。它僅適用於來自標準C庫的名稱。所有標準的C++函數和類型都在'std ::'命名空間中。 – juanchopanza