Vâng, rõ ràng.
(void)p;
nghĩa là đối tượng được việc đúc để void
loại, (mà không phải là một loại hoàn chỉnh) và đó là sự biểu hiện hoàn tất, kết quả của biểu thức không nên được sử dụng, do đó trình biên dịch không kiểm tra cho nó sử dụng .
Trích dẫn C11
tiêu chuẩn, chương 6.3.2.2, void
The (không tồn tại) giá trị của một biểu thức void
(một biểu thức có kiểu void) sẽ không được sử dụng trong bất kỳ cách nào, [... ...] Nếu một biểu thức của bất kỳ loại nào khác được đánh giá dưới dạng biểu thức void
, thì giá trị hoặc giá trị của biểu thức đó bị hủy.
Vì vậy, không có cảnh báo hoặc lỗi nào được tạo.
OTOH,
(void *)p;
nghĩa đối tượng là một con trỏ đến void
loại, mà là một loại hoàn toàn và nên được sử dụng trong chương trình của bạn. Trong trường hợp đó, việc không sử dụng đối tượng ra khỏi biểu thức được báo cáo đúng bởi trình biên dịch.
Nguồn
2015-10-14 14:26:23
Với giá trị truyền trước đây tại địa chỉ được chỉ bởi 'p', điều đó có thay đổi gì không? – ameyCU
@ameyCU nopes. Chỉ khi có hiệu ứng phụ, điều đó sẽ có hiệu lực, mà không phải là trường hợp ở đây. –
Và đúc 'p' lại thành' int * 'sẽ an toàn? – ameyCU