为什么编译程序时我的max和min int不起作用?

Der*_*erk 0 c gcc

我不明白为什么我收到错误:

~/SecureSoftware$ gcc AddNumTest.c
AddNumTest.c:11:0: warning: "INT_MAX" redefined [enabled by default]
/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:121:0: note: this is the location of the previous definition
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法,在命令行中添加一个大数字时不会崩溃我的程序.

#include<stdio.h>
#include <stdlib.h>
#include <limits.h>
#define INT_MAX  (2147483647)
#define INT_MIN  (-2147483647)

int main(int argc, char** argv)
{
   int i, TotalOfNumbers = 0;


   for (i = 1; i < argc; i++)
   {
      TotalOfNumbers += atoi(argv[i]);
      printf("Total of numbers entered = %d\n", TotalOfNumbers);
   }
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

Cha*_*ffy 5

重新定义INT_MIN并且INT_MAX不改变实际限制,它只是使描述它们的常量不准确.

限制基于平台的整数大小/宽度.要拥有真正不同的限制,您需要使用不同的数据类型(例如,long而不是int).

如果a long不够大,你可能需要进一步向上移动long long; 请注意,这些在C99标准之前未指定,因此您需要具有合理的现代编译器.


将程序更改为使用longs而不是ints将如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main(int argc, char** argv)
{
   long long i, TotalOfNumbers = 0;

   for (i = 1; i < argc; i++)
   {
      TotalOfNumbers += atoll(argv[i]);
      printf("Total of numbers entered = %lld\n", TotalOfNumbers);
   }
   return 0;
}
Run Code Online (Sandbox Code Playgroud)