पूरी तरह से व्यावहारिक स्तर पर, मैंने इस दैनिक से निपट लिया है। तिथि का सबसे अच्छा समाधान प्री-प्रोसेसर का उपयोग करना है। मेरे आम हेडर फाइल में शामिल हैं:
//-------------------------------------------------------------------------
// 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
अप्रयुक्त के उपयोग का एक उदाहरण है:
void foo(int UNUSED(bar)) {}
कभी-कभी आप वास्तव में एक ज़ोर() या डिबग बयान में उदाहरण के लिए, पैरामीटर का उल्लेख करने की जरूरत है। आप ऐसा कर सकते हैं के माध्यम से:
#define USED_UNUSED(x) x##_UNUSED // for assert(), debug, etc
इसके अलावा, निम्नलिखित उपयोगी होते हैं:
#define UNUSED_FUNCTION(x) inline static x##_UNUSED // "inline" for GCC warning
#define SUPPRESS_UNUSED_WARNING(x) (void)(x) // cf. MSVC UNREFERENCED_PARAMETER
उदाहरण:
UNUSED_FUNCTION(int myFunction)(int myArg) { ...etc... }
और:
void foo(int bar) {
#ifdef XXX
// ... (some code using bar)
#else
SUPPRESS_UNUSED_WARNING(bar);
#endif
}
स्रोत
2012-01-11 04:02:26
बहु भाषा स्रोत फ़ाइलों लेखन (बहुत) कड़ी मेहनत है। मेरा सुझाव है कि आप प्रत्येक एकल स्रोत फ़ाइल को केवल एक भाषा में रखें। – pmg
@pmg, आपकी सलाह के लिए धन्यवाद,: – Alcott
लेकिन यदि आप सी और सी ++ दोनों में संकलित करना चाहते हैं, तो 'printf' और' str :: cout' का उपयोग करने के लिए अलग-अलग फ़ंक्शंस लिखने की आवश्यकता नहीं है। 'printf' दोनों भाषाओं के लिए काम करता है। मैं दो कार्यों का उपयोग करने के खिलाफ पुनर्मूल्यांकन करूंगा जिसे एक के रूप में लिखा जा सकता है, क्योंकि उनकी कार्यक्षमता समान नहीं हो सकती है। –