हाल cppcheck कुछ सी कोड में एक त्रुटि उठाया, संरचना है कि:क्या सीए ऑपरेटर और सी में अनुमानित मूल्यांकन के साथ मूल्यांकन का आदेश है?
((void)(value_prev = value), value = new_value())
ज्यादातर मामलों में यह 2 लाइनों पर विभाजित किया जा सकता है, हालांकि ऐसे कुछ मामलों रहे हैं यह एक एकल बयान में है करने के लिए उपयोगी है।
प्रैक्टिस में मैंने लोकप्रिय कंपेलरों (जीसीसी/क्लैंग/एमएसवीसी) के साथ यह काम पाया, जो (चेतावनी स्तर के साथ भी उनके उच्चतम पर सेट किए गए) के साथ कोई चेतावनी नहीं देते हैं।
उदाहरण कोड:
#include <stdio.h>
int get_next(int i);
int main() {
int i = 0, i_prev = 10;
do {
printf("%d\n", i);
} while ((void)(i_prev = i),
(i = get_next(i)) != 10);
}
CppCheck 1.73 (नवीनतम लेखन के समय) इस कोड के साथ एक त्रुटि देता है:
(error) Expression '(void)(i_prev=i),(i=get_next(i))!=10'
depends on order of evaluation of side effects`
कोड बदला जा सकता है जबकि शांत करने के लिए चेतावनी, आदेश वास्तव में अपरिभाषित है?
क्या यह हो सकता है कि get_next (i) एक मैक्रो है, जैसे #define getnext (i) i ++? – gnasher729
नहीं, इस मामले में इसे फ़ंक्शन के रूप में परिभाषित किया गया है, cppcheck बिना किसी संशोधन के इस कोड पर त्रुटि देता है। – ideasman42