Предупреждение о случайном - неявное преобразование И %d не %long

Предупреждение 1. Я следую руководству по созданию приложения, и мне нужно использовать srandom(time(NULL)). Я посмотрел в Интернете и обнаружил, что arc4random может решить эту проблему, но мне недостаточно информации, чтобы узнать, как это сделать. Предупреждение указывает -

'неявное преобразование теряет целочисленную точность: 'time_t' (он же 'long') в 'unsigned int'

Вот мой код, где я использовал srandom.

- (void) shuffle {
NSMutableArray *validMoves = [[NSMutableArray alloc] init];

srandom(time(NULL)); // warning is here

for( int i=0; i<SHUFFLE_NUMBER; i++){
    [validMoves removeAllObjects];

Предупреждение 2

Предупреждение говорит мне: «Значения типа «NSInteger» не должны использоваться в качестве аргументов формата; вместо этого добавьте явное приведение к «long».

Могу ли я узнать, есть ли способ исправить это предупреждение.... или мне определенно нужно сделать %d %ld с "long"?

    if ([prefs boolForKey:@"Refresh"] == TRUE) {
    countmove = 0;
    thetime = 0;
    if (timer != nil) {
        [timer invalidate];
        timer = nil;
    }
    NSString *Pic = [NSString stringWithFormat:@"image%d.png", [prefs integerForKey:@"PuzzlePicture"]];
    [self initPuzzle:Pic];

person gjys2000    schedule 08.09.2014    source источник


Ответы (2)


Компилятор может сделать эти изменения формата за вас, так что нет причин не делать их.

Помните, что базовый тип NSInteger и NSUInteger различен для 32-битных и 64-битных процессоров (намеренно), поэтому у вас не может быть одного формата, который правильно работает для печати NSInteger как на 32-битных, так и на 64-битных (за исключением того, что вы можете попробовать z, который предназначен для size_t).

person gnasher729    schedule 08.09.2014

Это потому, что srandom(<#unsigned int#>) принимает unsigned int в качестве аргумента. И если вы проверите, typedef long __darwin_time_t; /* time() */ относится к типу long. Вот почему вы получаете это предупреждение.

Хотя странно, что у меня этого не происходитвведите здесь описание изображения(конечно, я собираю проект после написания этой строки):

person rptwsthi    schedule 08.09.2014
comment
Но как я могу исправить это предупреждение? - person gjys2000; 08.09.2014