История изменений
Исправление soomrack, (текущая версия) :
Равно может, но в этом случае оно же влезает в int и в соотв. со стандартом C11 п.6.3.1.1, оно должно превратится в int. Да, это будет тот же массив бит, но формально другой тип, и должны будут появиться ворнинги в ряде случаев, правда я пока не могу придумать когда даже (на примере long long int и long int).
Исправление soomrack, :
Равно может, но в этом случае оно же влезает в int и в соотв. со стандартом C11 п.6.3.1.1, оно должно превратится в int. Да, это будет тот же массив бит, но формально другой тип, и должны будут появиться ворнинги в ряде случаев, типа
short int x = 1;
if ((short int)1 == x * x) {};
у меня нет под рукой 16 битной системы, чтобы проверить, но вроде должно быть так. Нет?
PS: хотя ворнинга при сравнении long long int и long int на 64 битной платформе не появляется (оба по 8 байт).
PPS: тоже никаких ворнингов
#include <stdio.h>
void myfunction(long int value)
{
printf("%ld\n", value);
}
int main(void)
{
long long int number = 0xFFFFFFFF;
myfunction(number);
return 0;
}
видимо это считается по факту одним типом с двумя разными именами (long long int и long int)
Исправление soomrack, :
Равно может, но в этом случае оно же влезает в int и в соотв. со стандартом C11 п.6.3.1.1, оно должно превратится в int. Да, это будет тот же массив бит, но формально другой тип, и должны будут появиться ворнинги в ряде случаев, типа
short int x = 1;
if ((short int)1 == x * x) {};
у меня нет под рукой 16 битной системы, чтобы проверить, но вроде должно быть так. Нет?
PS: хотя ворнинга при сравнении long long int и long int на 64 битной платформе не появляется (оба по 8 байт).
Исправление soomrack, :
Равно может, но в этом случае оно же влезает в int и в соотв. со стандартом C11 п.6.3.1.1, оно должно превратится в int. Да, это будет тот же массив бит, но формально другой тип, и должны будут появиться ворнинги в ряде случаев, типа
short int x = 1;
if ((short int)1 == x * x) {};
у меня нет под рукой 16 битной системы, чтобы проверить, но вроде должно быть так. Нет?
Исходная версия soomrack, :
Равно может, но в этом случае оно же влезает в int и в соотв. со стандартом C11 п.6.3.1.1, оно должно превратится в int. Да, это будет тот же массив бит, но формально другой тип, и должны будут появиться ворнинги в ряде случаев, типа
short int x = 1;
if ((short int)1 == x * x) {};
у меня нет под рукой 32 битной системы, чтобы проверить, но вроде должно быть так. Нет?