printf(INT_MAX);
limits.h包含在内,由于某种原因,它不适用于此特定项目。在我的测试平台中,它只是起作用。我不知道如何解决这个问题,除了删除整个项目中的每个文件,直到它开始工作。这将是一项不人道的工作。如何更快地找到此错误?造成这种情况的常见原因是什么?
答案 0 :(得分:12)
我假设您已经搜索了自己的代码并为INT_MAX
可能未定义的实例构建系统。
如果可能的话,找到一种只编译一个源文件(.c
)的方法,这样你的迭代速度就会提高。如果您的Makefile
(或您使用的任何内容)已经只编译了更改的文件,而不是所有内容,那就足够了。
然后,在有问题的文件中,在第一个#include
之前和每个#include
之后添加:
#ifndef INT_MAX
#error INT_MAX not defined at this point
#endif
然后重建该模块并查看错误发生的位置。
如果失败,请在代码中添加上面的代码片段以查看未定义的位置。
如果事实证明您的<limits.h>
未定义它,则至少有两种可能性:
limits.h
快乐的黑客攻击。
PS。如果您需要完成删除文件以查找问题的过程,请注意您可以使用二进制搜索来加快速度:首先删除一半文件,如果问题仍然存在,您知道它在剩余的文件中,如果没有,则在您删除的文件中,或者很少在两组文件之间的交互中。然后使用适当的文件集进行迭代,直到将其缩小到足够小的范围。
答案 1 :(得分:12)
确保include指令是
#include <limits.h>
不
#include "limits.h"
向我们展示一个展示问题的完整程序,以及您收到的确切错误消息。复制并粘贴它们。如果您正在调用printf(),请不要忘记
#include <stdio.h>
尝试编译并运行此程序:
#include <stdio.h>
#include <limits.h>
int main(void)
{
printf("INT_MAX = %d\n", INT_MAX);
return 0;
}
它应该正常工作,没有警告或错误消息。如果没有,那么您的编译系统可能会出现问题,或者安装或配置它的方式,或者您使用它的方式。
答案 2 :(得分:2)
此代码永远不会起作用,因为printf
将指向格式字符串的指针作为其第一个参数。 INT_MAX
不是指向格式字符串的指针,而是一个整数。
你想要的是printf("%d", INT_MAX)
。