【发布时间】:2011-12-05 14:44:15
【问题描述】:
以下代码在大多数编译器上都能正常编译(包括 Microsoft Visual Studio 的 - cl、Minimalist GNU for Windows - MinGW),但在 Digital Mars Compiler - dmc 上编译失败并出现错误:Error: type qualifiers and static can only appear in outermost array of function parameter
const int MAXLENGTH32 = 32;
typedef char String32[MAXLENGTH32];
void f1(const String32 tokens[]) {
}
int main() {
return 0;
}
我想说的是:
我发布这篇文章的第一个原因是为了获得专家意见,了解为什么代码在流行的编译器上失败(Bjarne Stroustrup 本人推荐它http://www2.research.att.com/~bs/compilers.html)。主要问题似乎是在参数中使用
const。如果您删除const,代码在 DMC 编译器上编译得很好。第二个重要原因是我在调查编译失败的可能原因时,没有找到任何结论性的解释。更糟糕的是,我遇到了这样的建议:“C++ 程序员要避免使用 const”。发帖人接着说,很难弄清楚规范中关于
const在上述场景中的用法的说明,并且这些事情就是为什么 const 作为类型修饰符不在 D 中( - 解释一下)。
1234563它和移动。是的。我很想听听专家的意见,看看是什么让看起来像正常的代码在 DMC 编译器上失败。谢谢。
【问题讨论】:
-
流行的编译器?我从未见过在 D 上下文之外使用 DMC。
-
@CatPlusPlus:我通常用 3 个编译器编译 C++ 代码。 MinGW、DMC和微软自带的VS自带的CL。我可能错误地把它们中的任何一个都看得太认真了,以至于它应该如此。您会推荐哪个前 3 名(除了厨房水槽以外的所有东西都没有)? ;) 我知道这是一个完全不同的问题
-
GCC、Clang 和 MSVC。不过,如果您对 C++11 支持很认真,那么请放弃 MSVC。
-
@Cat:如果您认真对待 C++11 语言 支持。图书馆支持完全在那里。甚至最常用的有用 C++11 语言的东西也在那里(
auto、lambdas、移动语义)。您缺少可变参数模板和模板别名,但我认为通常不需要这些。一个 MSVC 实现要有用得多。 -
@Xeo:语言支持远比库支持重要。可以从 Boost 中提取库。
标签: c++ compiler-construction constants c++11