Ở cấp độ hoàn toàn thực tế, tôi đã giải quyết vấn đề này hàng ngày. Giải pháp tốt nhất cho đến nay là sử dụng bộ xử lý trước. tập tin tiêu đề chung của tôi chứa:
//-------------------------------------------------------------------------
// Suppress nuisance compiler warnings. Yes, each compiler can already
// do this, each differently! VC9 has its UNREFERENCED_PARAMETER(),
// which is almost the same as the SUPPRESS_UNUSED_WARNING() below.
//
// We append _UNUSED to the variable name, because the dumb gcc compiler
// doesn't bother to tell you if you erroneously _use_ something flagged
// with __attribute__((unused)). So we are forced to *mangle* the name.
//-------------------------------------------------------------------------
#if defined(__cplusplus)
#define UNUSED(x) // = nothing
#elif defined(__GNUC__)
#define UNUSED(x) x##_UNUSED __attribute__((unused))
#else
#define UNUSED(x) x##_UNUSED
#endif
Một ví dụ về việc sử dụng các UNUSED là:
void foo(int UNUSED(bar)) {}
Đôi khi bạn thực sự cần phải tham khảo các thông số, ví dụ như trong một assert() hoặc tuyên bố gỡ lỗi. Bạn có thể làm như vậy qua:
#define USED_UNUSED(x) x##_UNUSED // for assert(), debug, etc
Ngoài ra, sau đây là hữu ích:
#define UNUSED_FUNCTION(x) inline static x##_UNUSED // "inline" for GCC warning
#define SUPPRESS_UNUSED_WARNING(x) (void)(x) // cf. MSVC UNREFERENCED_PARAMETER
Ví dụ:
UNUSED_FUNCTION(int myFunction)(int myArg) { ...etc... }
và:
void foo(int bar) {
#ifdef XXX
// ... (some code using bar)
#else
SUPPRESS_UNUSED_WARNING(bar);
#endif
}
Nguồn
2012-01-11 04:02:26
Viết file nguồn đa ngôn ngữ là (rất) công việc khó khăn. Tôi đề nghị bạn giữ từng tệp nguồn duy nhất trong một ngôn ngữ duy nhất. – pmg
@pmg, cảm ơn lời khuyên của bạn,:) – Alcott
Nhưng nếu bạn muốn một cái gì đó để biên dịch trong cả C và C++, không cần phải viết các hàm riêng biệt để sử dụng 'printf' và' str :: cout'. 'printf' hoạt động cho cả hai ngôn ngữ. Tôi muốn recomment chống lại bằng cách sử dụng hai chức năng có thể được viết là một, vì khả năng rằng chức năng của họ có thể không giống nhau. –