Tôi đã nhìn vào một số macro tiền xử lý được sử dụng trong OpenSSL, và tôi tình cờ gặp sau đây từ crypto/stack/safestack.h
:Toán tử điều kiện có giá trị hằng số (đúng)?
#define CHECKED_STACK_OF(type, p) \
((_STACK*) (1 ? p : (STACK_OF(type)*)0))
#define CHECKED_SK_FREE_FUNC(type, p) \
((void (*)(void *)) ((1 ? p : (void (*)(type *))0)))
#define CHECKED_SK_FREE_FUNC2(type, p) \
((void (*)(void *)) ((1 ? p : (void (*)(type))0)))
Tôi đoán bằng văn bản theo cách đó để làm việc xung quanh một lỗi biên dịch (có thể là một cái gì đó cổ hasn đã được nhà cung cấp hỗ trợ trong hơn một thập kỷ).
Mục đích sử dụng số 1
ở trên là gì vì nó luôn đúng?
Xác minh loại 'p', có thể - toán hạng thứ hai và thứ ba của toán tử điều kiện phải được chuyển đổi thành cùng loại. –