इस कोड पर विचार करें:Printf, विशेष रूप से 64bit
typedef int64_t Blkno;
#define BLKNO_FMT "%lld"
printf(BLKNO_FMT, (Blkno)some_blkno);
यह 86 पर अच्छी तरह से और ठीक काम करता है। 64 पर, int64_t वास्तव में नहीं बल्कि एक long long
की तुलना में एक long
है, और जब तक long
और long long
64 पर एक ही आकार के होते हैं, संकलक एक त्रुटि उत्पन्न करता है:
src/cpfs/bitmap.c:14: warning: format ‘%lld’ expects type ‘long long int’, but argument 6 has type ‘Blkno’
- मैं
printf
कैसे बता सकता है कि मैं कर रहा हूँ एक 64 बिट प्रकार गुजर रहा है? - क्या
#define
BLKNO_FMT
जैसे उपरोक्त के रूप में उपयोगकर्ता प्रकारों के लिए चश्मा मानकीकृत करने का कोई बेहतर तरीका है?
'(Blkno)' कास्ट व्यर्थ है यदि आपने सही प्रारूप विनिर्देशक का उपयोग किया है। – user502515
यह व्यर्थ नहीं है, एक परिवर्तनीय कार्यों के पूर्णांक तर्क लंबे समय तक प्रचारित नहीं होते हैं। – dreamlax
@ user502515: '(Blkno) के बिना 'कंपाइलर' चेतावनी उत्पन्न करता है: रूपांतरण टाइप 'लंबा' निर्दिष्ट करता है लेकिन तर्क में 'int' टाइप किया जाता है [-Wformat] '' – jfs