下面的程序打印相同數量的兩倍上的gcc 4.8.2:確定數組大小時,括號是否有所作爲?
#include <stdio.h>
int main()
{
char a[13];
printf("sizeof a is %zu\n", sizeof a);
printf("sizeof(a) is %zu\n", sizeof(a));
}
根據this reddit post,GCC是在這方面不符合標準的,因爲括號內的表達式是不例外的,用於當在列表上陣列到指針的衰減不會發生。
這傢伙是否正確?下面是相關標準報價:
除了當它是
sizeof
操作者或一元&
操作者的操作數,或是用於初始化字符類型的陣列的字符串文字,或者是一個寬字符串文字用於初始化與wchar_t
兼容的元素類型的數組,具有類型'數組類型'的左值轉換爲具有指向數組對象的初始成員並且不是左值的類型爲'指向類型的指針'的表達式。
只是要清楚,他認爲,(a)
應該觸發數組到指針的衰減,因爲括號不能在上面(sizeof
符,一元&
操作,字符串文字作爲初始化)名單所涉及。
不,這傢伙是嚴重困惑 –
用他自己的話說,我會同意*最終困惑* – chqrlie
我已經處理了這個東西大約15年,但我肯定回憶一個場景,我認爲,sizeof是否存在括號,這取決於指針的大小或元素的大小等。 –