Có vẻ như sizeof không phải là một chức năng thực sự?cơ chế của sizeof() trong C/C++ là gì?
ví dụ, nếu bạn viết như thế này:
int i=0;
printf("%d\n", sizeof(++i));
printf("%d\n", i);
Bạn có thể nhận được kết quả như sau:
4
0
Và khi bạn thâm nhập vào mã lắp ráp, bạn sẽ tìm thấy sth như thế này:
movl $4, %esi
leaq LC0(%rip), %rdi
xorl %eax, %eax
call _printf
Vì vậy, trình biên dịch đưa trực tiếp hằng số "4" làm tham số của printf thêm gọi nó. Vậy sizeof làm gì?
Lưu ý rằng biểu thức được chuyển đến sizeof không được đánh giá, vì vậy tôi * không * tăng trước. Trông giống như một cách đáng yêu để giới thiệu một lỗi vào (hoặc làm xáo trộn) một số mã. – PaulMcG