为何不同环境下使用INT_MAX有时需引入<climits>头文件?
为什么有些环境无需包含
<climits>就能用INT_MAX,有些却必须? 这本质是不同C++标准库实现的差异,和你使用的编译器、平台配置直接相关:
C++标准的硬性规定:INT_MAX这类整数极限宏,标准明确要求必须在
<climits>头文件中定义,没有规定其他头文件(比如<iostream>)必须自动包含<climits>。所以严格符合标准的写法,必须显式添加#include <climits>才能使用INT_MAX。CLion能运行的原因:你在CLion里用的标准库(比如GCC的libstdc++、MSVC的STL),在实现
<iostream>时,内部可能因为自身代码逻辑的需要(比如处理输入输出时用到了整数范围相关的判断),间接包含了<climits>。你的代码相当于通过<iostream>间接拿到了INT_MAX的定义,所以能正常编译。Udacity平台报错的原因:该平台使用的标准库实现(或是更严格的编译配置)没有在
<iostream>中间接引入<climits>,你的代码找不到INT_MAX的定义,自然就编译报错,必须手动添加#include <climits>才能解决。
建议写C++代码时,养成显式包含所需头文件的习惯,不要依赖这种平台/库特定的间接包含,避免换环境后出现编译问题。
内容的提问来源于stack exchange,提问作者FluidMechanics Potential Flows
相关产品推荐
相关产品推荐

