【发布时间】:2020-07-19 06:00:20
【问题描述】:
以下代码在我的本地系统上运行良好,但在在线平台上引发编译错误。
#include <iostream>
int32_t time[int32_t(1e5)];
int main()
{
int32_t n;
std::cin>>n;
for(int32_t i=0;i<n;++i)
{
int32_t temp;
std::cin>>temp;
--temp;
++time[temp];
}
return 0;
}
很明显,错误是因为第3行int32_t time[int32_t(1e5)];而产生的
但是,我无法理解为什么会发生编译错误。
我没有包含ctime 或任何此类标头,甚至没有打开std 命名空间。但是还是发生了编译失败。
我的系统上有 gcc 8.3.0 和 __cplusplus 201703。不知道在线平台上的版本是什么。
【问题讨论】:
-
错误信息告诉你标题包含链 - 从
iostream开始。 -
这就是用户 C 库为其名称添加前缀的原因。您应该避免使用标准在全局范围内使用的名称。
-
尽管包括
ctime,但您也没有包括int32_t的正确标题(例如cstdint)。 -
我认为允许实现将 C 库定义放置在全局命名空间以及
std命名空间中。 -
@deadLock en.cppreference.com/w/cpp/header 请参阅“C 兼容性标头”部分
标签: c++ std backwards-compatibility