এ NSInteger32-বিট প্ল্যাটফর্মগুলিতে 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৪ বিটের জন্য সংকলন করার সময় আমি একটি সতর্কতা পাই ।
যদি আমি %ldbit৪ বিট আকারের সাথে মেলে ব্যবহার করি , 32 বিট কোডের জন্য সংকলন করার সময় আমার %dপরিবর্তে আমি ব্যবহার করার পরামর্শ দিচ্ছি warning
আমি উভয় সতর্কতা একবারে কীভাবে ঠিক করব? আমি যে কোনও স্পেসিফায়ার ব্যবহার করতে পারি তা কি কাজ করে?
এটি প্রভাবিত করে [NSString stringWithFormat:]এবং [[NSString alloc] initWithFormat:]।
static inline NSIntToLong(NSInteger i) {return (long)i;}। এটি সম্পূর্ণরূপে চেকিং অক্ষম করা এড়িয়ে চলে (যেমন i এর ধরণের পরিবর্তন হয়)।