LINUX.ORG.RU

История изменений

Исправление 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 битной системы, чтобы проверить, но вроде должно быть так. Нет?