2015-10-14 13 views

Trả lời

11

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.

+0

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

+0

@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. –

+0

Và đúc 'p' lại thành' int * 'sẽ an toàn? – ameyCU

14

Khi bạn làm

(void) p; 

Bạn nói với trình biên dịch chỉ đơn giản là bỏ qua các kết quả của biểu thức p. Đó là một cách hiệu quả giống như một tuyên bố rỗng:

; 

Khi bạn làm

(void *) p; 

Bạn nói với trình biên dịch để điều trị các biến p như một con trỏ generic, và đó là sự biểu hiện đầy đủ cho tuyên bố, một biểu thức mà không thực sự làm bất cứ điều gì và bạn nhận được thông báo lỗi.

+0

bạn có thể sử dụng một số tính năng này trong thế giới thực không? –

+1

@DavidHaim: Tôi đã nhìn thấy nó trong trường hợp một số biến cục bộ chỉ được sử dụng bên trong một 'IFDEF', để làm cho nó không tăng cảnh báo khi được biên dịch với các thiết lập lấy nhánh' ELSE'. –

+0

lol, vì vậy hãy khai báo biến cục bộ bên trong nhánh ELSE nếu đó là nơi duy nhất chạm vào nó. hoặc tôi đoán nó đang bắt đầu từ một giai đoạn mà bạn ahd khai báo tất cả các biến với nhau ở đầu phạm vi. –

Các vấn đề liên quan