4 回答

TA貢獻1802條經(jīng)驗 獲得超10個贊
因為C標準是這樣說的,所以它是唯一的選擇。
結(jié)果:
sizeof的操作數(shù)可以是帶括號的類型
sizeof (int)
,而不是對象表達式。括號是不必要的:
int a; printf("%d\n", sizeof a);
完全可以。人們經(jīng)??吹剿鼈儯紫仁且驗樗鼈冃枰鳛轭愋娃D(zhuǎn)換表達式的一部分,其次是因為sizeof具有很高的優(yōu)先級,因此sizeof a + b
與并不相同sizeof (a+b)
。但是它們不是sizeof調(diào)用的一部分,而是操作數(shù)的一部分。您不能使用sizeof的地址。
作為sizeof操作數(shù)的表達式不會在運行時求值(
sizeof a++
不會修改a)。作為sizeof操作數(shù)的表達式可以具有除void或函數(shù)類型以外的任何類型。確實,這就是sizeof的重點。
在所有這些點上,功能都會有所不同。函數(shù)和一元運算符之間可能還存在其他差異,但是我認為這足以說明為什么sizeof不能成為函數(shù),即使有理由要這樣做。

TA貢獻1853條經(jīng)驗 獲得超9個贊
它可以用作編譯時常量,僅當它是運算符而不是函數(shù)時才可能使用。例如:
union foo {
int i;
char c[sizeof(int)];
};
從語法上講,如果它不是運算符,則它必須是預(yù)處理器宏,因為函數(shù)不能將類型作為參數(shù)。這將是很難實現(xiàn)的宏,因為sizeof它既可以將類型也可以將變量作為參數(shù)。

TA貢獻1817條經(jīng)驗 獲得超6個贊
因為C標準是這樣說的,所以它是唯一的選擇。
該標準可能是正確的,因為sizeof采用類型和
通常,如果函數(shù)的域或共域(或兩者)包含比實數(shù)復(fù)雜得多的元素,則該函數(shù)稱為運算符。相反,如果函數(shù)的域和共域都不包含比實數(shù)更復(fù)雜的元素,則該函數(shù)可能會簡單地稱為函數(shù)。余弦等三角函數(shù)就是后一種情況的示例。
另外,當函數(shù)被使用得比通用F(x,y,z,...)形式頻繁地使用時,它們的符號表示法發(fā)展得更快或更容易時,所得的特殊形式也稱為運算符。示例包括中綴運算符(例如加號“ +”和除號“ /”)以及后綴運算符(例如階乘“!”)。這種用法與所涉及實體的復(fù)雜性無關(guān)。

TA貢獻1875條經(jīng)驗 獲得超3個贊
因為它不是功能。您可以這樣使用它:
int a;
printf("%d\n", sizeof a);
函數(shù)確實具有入口點,代碼等。函數(shù)要在運行時(或內(nèi)聯(lián))運行,sizeof必須在編譯時確定。
- 4 回答
- 0 關(guān)注
- 737 瀏覽
添加回答
舉報