因此,当使用基本icc bob.cpp -o bob
编译并运行时,以下代码段错误:
#include <string>
int foo () {
return 6;
}
int main() {
std::string t[foo()];
}
然而,以下两个类似的程序似乎运行良好。
#include <string>
int foo () {
return 6;
}
int main() {
int f = foo();
std::string t[f];
}
和
#include <string>
int foo () {
return 6;
}
int main() {
std::string t[6];
}
我对发生的事情感到有点困惑。显然,可变长度数组是非标准的,这对我来说是一个惊喜,因为我总是使用支持它的g ++。但是,如果ICC不支持它,为什么会编译?另外,为什么示例2“工作”?
这里的代码是什么,如果第一个代码段不正确,为什么要编译,然后为什么会出现段错误?
我在2011 x86_64 Intel(R)Core(TM)i5上使用icc(ICC)12.0.2 20110112。
由于
答案 0 :(得分:3)
嗯,虽然C ++没有可变长度数组(但C99确实如此),显然ICC确实支持它们作为扩展,因为你的代码实际上是编译(并且因为你的第二个代码段)实际上运行没有崩溃)。
如果第一个版本崩溃,那么它必定是ICC实施该非标准扩展的一个错误。