Tôi biết rằng sizeof
không bao giờ đánh giá toán hạng của nó, ngoại trừ trong trường hợp cụ thể khi toán hạng được nói là VLA. Hoặc, tôi nghĩ Tôi biết.VLAs và tác dụng phụ trong toán hạng của sizeof
void g(int n) {
printf("g(%d)\n", n);
}
int main(void) {
int i = 12;
char arr[i]; // VLA
(void)sizeof *(g(1), &arr); // Prints "g(1)"
(void)sizeof (g(2), arr); // Prints nothing
return 0;
}
Điều gì đang xảy ra?
Chỉ trong trường hợp, điều này được biên dịch bằng GCC 5.1 trên Coliru.
Một lần, một trường hợp tốt để trả lời câu hỏi của riêng bạn. – Bathsheba
Bạn có thể muốn thêm điều này ở đâu đó: * 6.5.3.4 Các toán tử sizeof và _Alignof Nếu kiểu toán hạng là một mảng có độ dài biến là loại , toán hạng được đánh giá; nếu không, toán hạng không được đánh giá và kết quả là hằng số nguyên . * vì vậy, người đọc sốt sẽ bị nhầm lẫn. – this
@ this Cảm ơn bạn :) – Quentin