Я пытаюсь форсировать 64-битные целые числа в OS X 10.5.6. работает на Apple MacBook Intel Core 2 Duo. Вот мой код c:
#include<stdio.h>
int main()
{
long a = 2147483647; /*== 2^32 - 1*/
long aplus1;
printf("a== %d. sizeof(a) == %d \n", a, sizeof(a));
aplus1 = a+1;
printf("aplus1 = %d \n", aplus1);
}
Компиляция без каких-либо ключей дает следующее:
$ gcc testlong.c -o testlong ;./testlong
a== 2147483647. sizeof(a) == 4
aplus1 = -2147483648
Компиляция с ключом -m64 дает:
$ gcc testlong.c -o testlong -m64; ./testlong
a== 2147483647. sizeof(a) == 8
aplus1 = -2147483648
Таким образом, вторая версия, очевидно, использует 64-битное хранилище, но все равно генерирует ошибку переполнения, хотя 2 ^ 32 должно быть в пределах диапазона 64-битного целого числа. Есть идеи?
Я бы предпочел решение, которое можно принудительно выбрать из опции gcc, вместо того, чтобы требовать, чтобы я изменил несколько строк исходного кода (моя настоящая проблема не в приведенном выше примере, а скорее, мне нужно принудительно использовать целочисленную арифметику в более общем виде. ситуация).