используя макросы в с - PullRequest
       3

используя макросы в с

1 голос
/ 15 сентября 2011
#include "stdafx.h"
#include<stdio.h>
int aarray[]={1,2,3,4,5,6,7,8};
#define SIZE (sizeof(aarray)/sizeof(int))

int main()
{
    printf("%d\n",SIZE);
    if(-1<=SIZE)printf("1\n");
    else printf("2\n");
    return 0;
}

Почему это печатает 2? РАЗМЕР 8, что больше -1, поэтому он должен был печатать 1. Но почему он печатает 2? Пожалуйста, помогите мне понять.

Ответы [ 2 ]

6 голосов
/ 15 сентября 2011

Вы сравниваете значение со знаком (-1) и значение без знака (значение, создаваемое SIZE, равно size_t, что без знака).

Таким образом, -1 повышается до значения без знакаи становится больше чем SIZE.

2 голосов
/ 15 сентября 2011

Посмотрите на продвижение шрифта в вашей любимой книге C. Результат sizeof является беззнаковым, а затем -1 преобразуется в unsigned, что является большим числом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...