WebKit có rất nhiều dòng tiền xử lý như thế này: #if MACRO1(MACRO2)
Tuyên bố macro này có hợp pháp C++ hay cái gì khác không? Và nếu nó là hợp pháp như thế nào cho nó hoạt động
Ví dụ:
#if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT))
#include "MediaPlayerPrivateQTKit.h"
#if USE(AVFOUNDATION)
#include "MediaPlayerPrivateAVFoundationObjC.h"
#endif
...
Vì vậy, suy nghĩ đầu tiên của tôi là họ chức năng giống như macros, nhưng tôi không thể thấy cách đó sẽ làm việc, và tôi không thể tìm thấy bất kỳ #defines cho các macro bất cứ nơi nào trong mã nguồn.
Tôi đã hỏi một kỹ sư khác là gì và anh ấy chưa bao giờ thấy nhiều macro được sử dụng giống như vậy bên trong #if trước đó. Tôi tìm thấy điều này wiki page mà nói về họ nhưng nó vẫn không rõ ràng cho tôi nơi họ đến từ,
Vì vậy, câu hỏi của tôi sau đó: Đây có phải là C++ hợp lệ hoặc nó đang được thay thế bằng mã bằng công cụ/ngôn ngữ khác CMake hoặc cái gì khác, và nếu nó là hợp lệ C + + là có một spec bất cứ ai là nhận thức được rằng cuộc đàm phán về điều này?
Tôi là kỹ sư hỗ trợ cho công cụ Phân tích tĩnh C++ không xử lý cú pháp này. Một khách hàng yêu cầu chúng tôi xử lý nó, nhưng nếu tôi sẽ đưa nó cho kỹ sư cao cấp, tôi muốn không có âm thanh như một thằng ngốc :) Vì vậy, tôi muốn gritty nitty nếu có ai biết điều đó.
Nó nói ngay trong trang wiki bạn đã đăng liên kết cho rằng các macro đó được định nghĩa trong 'Platform.h', bạn có tìm tệp đó không? –
Về mặt kỹ thuật hợp pháp hay không, nếu nó xây dựng với một số trình biên dịch bạn hỗ trợ và một khách hàng có đủ sức mạnh muốn nó thì bạn nên xem xét hỗ trợ nó, ít nhất là sau một lá cờ thời gian chạy, thậm chí nếu nó là macro-d trong CMake hoặc cái gì khác. Nếu đó là CMake-d trong đó bạn có thể đẩy nó trở lại cho khách hàng để làm cho họ làm cho CMake tạo ra mã thực tế được biên dịch rồi phân tích tĩnh đó? – Rup
@ John nó cũng có thể được tạo ra bởi các kịch bản xây dựng và không phải trong thanh toán nguồn. Tradsud, có thực sự bạn đã cố gắng xây dựng WebKit để xem những gì nó làm? – Rup