এ NSInteger
32-বিট প্ল্যাটফর্মগুলিতে 32 বিট, এবং 64-বিট প্ল্যাটফর্মগুলিতে 64 বিট its এমন কোনও NSLog
নির্দিষ্টকরণ রয়েছে যা সর্বদা আকারের সাথে মেলে NSInteger
?
সেটআপ
- এক্সকোড 3.2.5
- llvm 1.6 সংকলক (এটি গুরুত্বপূর্ণ; জিসিসি এটি করে না)
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF
চালু
এটাই আমাকে কিছুটা দুঃখের কারণ করছে:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
@autoreleasepool {
NSInteger i = 0;
NSLog(@"%d", i);
}
return 0;
}
32 বিট কোডের জন্য আমার %d
স্পেসিফায়ার দরকার । তবে আমি যদি %d
স্পেসিফারটি ব্যবহার করি তবে আমি %ld
পরিবর্তে ব্যবহার করার জন্য bit৪ বিটের জন্য সংকলন করার সময় আমি একটি সতর্কতা পাই ।
যদি আমি %ld
bit৪ বিট আকারের সাথে মেলে ব্যবহার করি , 32 বিট কোডের জন্য সংকলন করার সময় আমার %d
পরিবর্তে আমি ব্যবহার করার পরামর্শ দিচ্ছি warning
আমি উভয় সতর্কতা একবারে কীভাবে ঠিক করব? আমি যে কোনও স্পেসিফায়ার ব্যবহার করতে পারি তা কি কাজ করে?
এটি প্রভাবিত করে [NSString stringWithFormat:]
এবং [[NSString alloc] initWithFormat:]
।
static inline NSIntToLong(NSInteger i) {return (long)i;}
। এটি সম্পূর্ণরূপে চেকিং অক্ষম করা এড়িয়ে চলে (যেমন i এর ধরণের পরিবর্তন হয়)।