2012-05-23 36 views

回答

1

是的。 C和C++都使用<stdio.h>,它在我所知的所有實現中都有相同的方案。

+1

在C++中它將是'',它應該出現在全局和'std'命名空間中,所以我猜它不應該是宏或者至少不是隻是一個宏 –

+0

@ K-ballo:是的。許多實現提供了宏和函數,以便可以操作函數指針。 – wallyk

+0

很多?我期望所有符合標準的人都會...... –

3

這將取決於您的cstdio的實施。在大多數情況下,這實際上只是一個圍繞stdio.h的包裝,在std名稱空間內聲明瞭包裝,並且CC++編譯器共享用於C函數的相同標準庫。例如,VS2010使用stdio.hC++,其中putc是作爲宏函數實現的,具體取決於環境和其他編譯時定義。

+0

非常感謝 –

+0

@風鋼不客氣。你能看到你的'cstdio'文件並找出它使用哪一個?或者,您可以查看簡單示例的預處理器輸出以查看其使用情況。 – Anthony

2

哪個版本的C++? C++ 83(1983)? C++ 98(1998)? C++ 11(2011)?

C++ 98和C++ 11規範依賴於C庫函數的ISO C規範,並且不會對它們施加額外的實現約束,除了將stdio.h重命名爲cstdio.h並允許不包含點-h後綴的包含。

See: C++98 Specification

See: C++11 Specification

查找範圍cstdio.h如果你有興趣在特定的編譯器。然而,如果我們深入挖掘並看看ISO C標準:「ISO/IEC 9899:1990」(C89/C90),那麼我們發現它不能在網上免費觀看(而不是即使是最終的標準草案),所以移動到C99(不是ISO C),您會發現...

... C99(不是「ISO C」)表示putc()可以實現爲宏,

See: C99 Specification

所以,如果你真的在的OBJ-C++(使用C99)開發,那麼C99是相關規範利弊ider,不是 ISO C(C90)。另外,由於C99允許編譯器編寫者決定是否使用putc()宏,所以您應該認爲它是一種開放的可能性,並決定是否真的關心C90(ISO C)規範是否過時(現在即使C11(2011)已經出來。)

+0

無論現代最新的編譯器是否可能使用,其可能性都是putc()可以用另一種方式或兩種方式實現,如另一張海報所述。 – mda