पृष्ठभूमि: मेरे पास कई स्क्रिप्ट हैं जो प्रमुख "0x" ढूंढकर हेक्स संख्याओं की तलाश में लॉग फ़ाइलों को पार्स करती हैं। हमारी एम्बेडेड सी लाइब्रेरी एक नए printf में बदल गई। नया प्रिंटफ हमारे पिछले की तुलना में अधिक मानकों का अनुपालन करता है और मेरी स्क्रिप्ट टूट जाती है।सी प्रिंटफ प्रारूप "% # x" के साथ "0x" के बिना 0 (शून्य) मुद्रित क्यों किया जाता है?
एक लिनक्स बॉक्स पर:
#include <stdio.h>
int main(void)
{
printf("%#010x\n", 0);
printf("%#010x\n", 1);
return 0;
}
आउटपुट (glibc का उपयोग) है: हमारे firmwware पर
0000000000
0x00000001
आउटपुट था:
0x00000000
0x00000001
printf (3), से '#' ध्वज चरित्र: "एक्स और एक्स रूपांतरणों के लिए, एक nonzero परिणाम स्ट्रिंग" 0x "(या एक्स बातचीत के लिए" 0 एक्स "है आयनों) इसे प्रस्तुत किया। "
मैं उत्सुक हूँ क्यों। सी मानकों के दस्तावेजों के माध्यम से खोदने या मानक समिति के सदस्यों के लिए दोपहर का भोजन खरीदने के बिना, एक शून्य मूल्यवान तर्क पर एक अग्रणी 0x क्यों नहीं?
जंगली अनुमान: आधार पर ध्यान दिए बिना 0 0 है, इसलिए इसे निर्दिष्ट करने की कोई आवश्यकता नहीं है। –
यह ध्यान देने योग्य है कि आप '0x% 08x" लिखकर एक अग्रणी '0x' सहित * हमेशा * का व्यवहार प्राप्त कर सकते हैं, जबकि मानक वर्णित व्यवहार लाइब्रेरी से प्राप्त करने के लिए कठिन होगा * हमेशा * शामिल अग्रणी '0x'। हो सकता है कि मानदंड समिति पूरी तरह से सबसे आम मामले की बजाय, कठिन-से-प्राप्त-अन्यथा मामले के लिए अनुकूलन कर रही थी? (बेशक, आप '"% # 10x "' से '0x% 8x" ''' नहीं बदल सकते हैं, लेकिन फिर, किसी को शून्य-पैडिंग के बिना '0x0' देखना चाहते हैं।) – ruakh
कोई उल्लेख नहीं है इनमें से [सी 8 9 तर्क] (http://www.lysator.liu.se/c/rat/title.html) (एचटीएमएल) या [सी 99 तर्क] में (http: //www.open-std। संगठन/जेटीसी 1/एससी 22/wg14/www/C99RationaleV5.10.pdf) (पीडीएफ)। –