[問題] printf有包含在iostream裡面嗎?

看板C_and_CPP作者 (加油!!)時間14年前 (2011/05/01 23:57), 編輯推噓7(7028)
留言35則, 8人參與, 最新討論串1/1
剛剛查函式庫裡面沒有 可是我用dev 和vc compiler竟然都過 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.38.115.29

05/01 23:59, , 1F
cstdio ?
05/01 23:59, 1F

05/02 00:04, , 2F
間接有
05/02 00:04, 2F

05/02 00:05, , 3F
05/02 00:05, 3F

05/02 00:13, , 4F
標準沒規定標頭彼此的包含關係,故不重要
05/02 00:13, 4F

05/02 00:24, , 5F
就算有, 你在呼叫printf前最好還是引入 [c]stdio, 以
05/02 00:24, 5F

05/02 00:24, , 6F
表明檔案的相依性
05/02 00:24, 6F

05/02 01:03, , 7F
二樓是丟進doxygen看的嗎XD
05/02 01:03, 7F

05/02 01:13, , 8F
猜的。因為如果沒間接include,那 C++ 編譯器不會放行
05/02 01:13, 8F

05/02 01:14, , 9F
然後 google 圖片搜尋,include graph iostream
05/02 01:14, 9F

05/02 01:19, , 10F
看來p大是優秀鄉民, 都會附真相
05/02 01:19, 10F

05/02 01:22, , 11F
每次說有正妹沒附圖我都很怒
05/02 01:22, 11F

05/02 01:40, , 12F
感謝p大好圖XD
05/02 01:40, 12F

05/02 02:10, , 13F
我用mingw gcc4.5只include iostream會說printf不在scope
05/02 02:10, 13F

05/02 02:11, , 14F
所以好像不一定間接include cstdio?
05/02 02:11, 14F

05/02 02:11, , 15F
我剛剛試了一下 gcc 4.4.5 也一樣
05/02 02:11, 15F

05/02 02:12, , 16F
必須要 #include <cstdio> 才可以
05/02 02:12, 16F

05/02 02:13, , 17F
不過我本來以為 cstdio 必須要寫 std::printf 才可以...
05/02 02:13, 17F

05/02 02:13, , 18F
剛剛試了卻發現其實不用 std 的
05/02 02:13, 18F

05/02 02:32, , 19F
看了一下cstdio 裡面直接include stdio.h啊XD
05/02 02:32, 19F

05/02 02:38, , 20F
應該是這樣 namespace std{ #include <stdio.h> }
05/02 02:38, 20F

05/02 02:41, , 21F
我錯了...Orz
05/02 02:41, 21F

05/02 02:43, , 22F
不過他並沒有包在.._GLIBCXX_BEGIN_NAMEsPACE(std)裡
05/02 02:43, 22F

05/02 02:46, , 23F
樓上可以看一下 #undef clearerr 上面那行敘述
05/02 02:46, 23F

05/02 02:48, , 24F
他把符號重新放在 namespace 裡了 XD
05/02 02:48, 24F

05/02 02:51, , 25F
新版 gcc 程式碼有改過,原本舊版的ios會包含stdio.h,現
05/02 02:51, 25F

05/02 02:51, , 26F
在沒有囉,猜測 dev-c 用的 gcc 比較舊,那時還沒改
05/02 02:51, 26F

05/02 04:13, , 27F
#undef clearerr那行不是說取消掉macro嗎? 後面才是放在
05/02 04:13, 27F

05/02 04:14, , 28F
namespace std吧XD 話說我剛無聊用doxygen跑iostream的
05/02 04:14, 28F

05/02 04:14, , 29F
include graph,cstdio有間接include到啊 為啥不能用@@?
05/02 04:14, 29F

05/02 04:16, , 31F
ps.這是gcc 4.4.1
05/02 04:16, 31F

05/02 09:19, , 32F
他用條件式編譯擋掉了 #ifndef _GLIBCXX_STDIO_MACROS
05/02 09:19, 32F

05/02 09:20, , 33F
_GLIBCXX_STDIO_MACROS 預設都有define,所以不會include
05/02 09:20, 33F

05/02 09:20, , 34F
可是doxygen不能判斷條件式編譯的狀況
05/02 09:20, 34F

05/02 10:10, , 35F
Dev-C++ 的 MinGW 版本超舊的, 這也是不要用的原因之一..
05/02 10:10, 35F
文章代碼(AID): #1DlOBDeq (C_and_CPP)