2013-10-18 17 views
-1

當你想要使用int32_tmemcpy時,爲什麼gcc48和clang之間有不同的包含?爲什麼使用clang和gcc,當你想使用`int32_t`或`memcpy`時你的include是不同的?

時使用gcc,你包括<iostream>後,你還應該包括<stdint.h><string.h>使用int32tmemcopy

時使用鐺,你只需要包括<iostream>,您可以自由使用int32tmemcopy,stdint。 h和string.h自動包含在內。

這是爲什麼? 我可以運行clang作爲gcc行爲嗎?

我使用Mac OS。

+1

你不需要*''使用'int32_t'或'memcpy'編譯器。你*應該*包含''和''這兩個編譯器。行爲上的差異是因爲標準頭允許包括其他頭,包括其他標準頭。 clang必須包含其他2個頭文件,而gcc不包含,但不能依賴任何一個編譯器的當前行爲。 – Praetorian

+0

當我們使用gcc並且包括時,我們需要包括來使用memcpy,但是鏗鏘不需要。 – frogcjn

+3

你對這個未成年人的事情感到har's不安。如果你打算使用'int32_t'和'memcpy',你的代碼將不會是可移植的,除非你同時包含'stdint.h'和'string.h'。擔心這一點,而不用擔心如何讓一個編譯器像另一個編譯器那樣工作。如果你真的不關心編寫正確的代碼,你應該做的是查找標準中列出的所有標準頭文件的名稱,創建自己的頭文件,比如'icanhazallstdheaderz',包括你在頭文件中找到的頭文件的名稱它。現在包含一個文件,所有編譯器的行爲都相同。 – Praetorian

回答

1

可能是因爲鏗鏘的標準庫碰巧包含<stdint.h><string.h>已在<iostream>由於其私人原因;這是不能保證的,正如你所看到的,你的gcc的標準庫不能這樣工作。

不要依賴這樣的行爲;無論這些巧合如何,總是包含所需的文件。

+0

如何使clang的行爲爲gcc?我試圖讓它們的libstdC++相同,它們使用相同的文件,但也存在差異。 – frogcjn

+0

@frogcjn:所以,你說你更願意修改你的環境來編譯你的不正確的代碼,而不是編寫正確的代碼? –

+0

我的學校使用gcc,但我想用Xcode 5.0編輯我的代碼。 Xcode必須使用clang,您不能將其編譯器更改爲gcc。所以我想改變叮噹的行爲,讓叮噹更像gcc。 – frogcjn

相關問題