2017-03-24 25 views
1

所以很多書說我們決不能浪費一點算術和函數的定義。我看到很多從0到255的小數字被定義爲char型變量,甚至更大的正數被定義爲unsigned short int型。爲什麼我們不使用短整數來表示返回值?

爲什麼我們不使用unsigned short int或char類型而不是int來表示返回值?

我想:

char main(){return 0;} 

這是確定。

+4

「很多書說我們絕不能浪費一點......」有什麼書說的?這不是一個真實的陳述。 –

+4

你的函數可以返回任何你想要的,但不是'main()'。那個返回'int',因爲這是C標準指定它的方式。 – Havenard

+3

該標準特別要求'main'返回一個'int'(略微過分簡化),所以這就是調用環境所期望的。如果你願意,你可以使用'char'返回類型來執行'main'以外的功能,但這不會有很大的幫助。 –

回答

4

在返回short或甚至char而不是int時,很少涉及任何返還。在絕大多數C實現中,將使用機器寄存器來保存返回值,並且返回short而不是int的唯一區別是該寄存器的一部分將保持未使用狀態。 (順便說一句,這也是爲什麼一個main返回一個char「作品」給你,即使標準不保證它會的。)

幾乎是唯一的理由,那麼,返回一個short是當你有一個特定的算法,有明顯的原因與short s而不是int s,這只是不常見。

爲了記錄,同樣的事情可以說是函數參數。

+0

另外,如果我理解正確的話,你有一個額外的時鐘或兩個用於從'int'到任何較小的數據選擇的隱式轉換,所以你需要花費從默認的' int'除了部分使用寄存器外。 –

+0

@ DavidC.Rankin:不知道你可能在哪裏得到這個想法。 *可能*涉及到演員的費用,但那不是我們所說的真的,是嗎? (在很多情況下,即使那些是免費的,甚至可能是大多數。) – Dolda2000

+0

@ DavidC.Rankin:再次想到,我想你正在談論Intel CPU上的部分寄存器延遲。儘管如此,即便如此,也只是在演員中存在問題,而不是像你一直使用相同的值作爲短片,我相信這就是我們在這裏討論的。 – Dolda2000

1

如果您瞭解了有關彙編語言和微機原理的知識,您將會知道,這是訪問數據的快速方法(一個循環)。

對於32位或64位CPU,一個指令週期可以獲取/設置32位或64位數據。 如果一個變量定義爲int,CPU可以將其值設置爲一個週期。如果對32位CPU使用char或short,CPU需要更多的週期來獲取/設置其值。

如果您正在使用8位或16位CPU,則會有所不同。但通常int的長度與CPU的位相同,所以整數是要訪問的快速類型。

+0

*「如果對32位CPU使用char或short,CPU需要更多週期來獲取/設置其值。」* - 這很少是真的。絕大多數現代CPU可以以完全相同的速度與8位,16位,32位或64位數字一起工作。我能想到的唯一真實世界的例外是BWX Alpha處理器,我認爲使用這些處理器的人數很少。 – Dolda2000

+0

你有沒有檢查DSP或ARM的彙編代碼?你知道DSP或ARM如何優化他們的代碼嗎?例如,它將在優化時將char轉換爲整數以實現訪問速度。 – Harrison

+0

不可否認,我並不是那麼多關於DSP代碼的東西(但對於一般答案來說,這聽起來相當深奧),但我很好奇你在ARM上的操作。你在哪裏說有什麼特別的性能命中與'short'或'char's'int'工作?就我而言,我沒有發現任何特殊情況。 – Dolda2000

相關問題