जी ++ और -Waggregate-return
चुप्पी करने की कोशिश कर रहा है- g ++ - बग्गी कंपाइलर के लिए केवल मैक्रो में कुल-वापसी?
#define DOCTEST_CHECK(expr) \
do { \
_Pragma("GCC diagnostic push"); \
_Pragma("GCC diagnostic ignored \"-Waggregate-return\"");\
if(Result failed = (ExpressionDecomposer() << expr)) \
printf("%s\n", failed.m_decomposition.c_str()); \
_Pragma("GCC diagnostic pop"); \
} while(false)
DOCTEST_CHECK(true == false); // produces warnings
लेकिन हाथ संस्करण द्वारा unrolled कोई चेतावनी का उत्पादन नहीं करता साथ संकलन का उपयोग कर:
do {
_Pragma("GCC diagnostic push");
_Pragma("GCC diagnostic ignored \"-Waggregate-return\"");
if(Result failed = (ExpressionDecomposer() << true == false))
printf("%s\n", failed.m_decomposition.c_str());
_Pragma("GCC diagnostic pop");
} while(false);
व्यवहार ही होना नहीं करना चाहिए?
मुझे नहीं लगता कि Result
और ExpressionDecomposer
प्रकारों की बात है - बस कक्षाएं।
मैं अभिव्यक्ति अपघटन को here (चीजों का नाम बदलकर थोड़ा सा) प्राप्त करने की कोशिश कर रहा हूं।
संपादित करें: क्यों: >>here < < ऐसा न हो कि पुस्तकालय
मेरा प्रश्न है का उपयोग कर समस्या का एक लाइव डेमो है? मैक्रो का उपयोग कर पहले मामले में मैं कैसे चेतावनी मुक्त कर सकता हूं? मैं दुनिया भर में चेतावनी को शांत करने का जोखिम नहीं उठा सकता।
मुझे पता है कि यह सवाल का जवाब नहीं देता है, लेकिन '-उग्रेगेट-रिटर्न' बल्कि पैडेंटिक लगता है और इसे अनदेखा किया जाना चाहिए, खासकर सी ++ में जहां मूल्य द्वारा लौटाना बिल्कुल सामान्य है। आप [इस सवाल] पर एक नज़र डाल सकते हैं (http://stackoverflow.com/questions/14016993/confusion-in-regards-to-purpose-behavior-of-waggregate-return)। –
मैं मैक्रोज़ में प्रागम्स के साथ मुद्दों वाले जीसीसी को अस्पष्टता से याद करता हूं; आप अपने बगजिला को खोजना चाहेंगे। –
@AlexandreC। मैं व्यक्तिगत कोड के लिए कभी भी उस चेतावनी का उपयोग नहीं करता लेकिन लाइब्रेरी जो मैं लिख रहा हूं उसे सबसे आक्रामक स्तरों पर भी पूरी तरह से चेतावनी दी जानी चाहिए (मैं पूर्णता से पीड़ित हूं) ... यह चेतावनी '' '-Wall' अच्छे कारण के लिए '' या '' '-Wextra''' ... – onqtam