GCC 或 Clang `-std=` 是否有任何 "moving target" 别名值,暗示 "use the latest standard"?

Are there any "moving target" alias-values for GCC or Clang `-std=`, implying "use the latest standard"?

我想创建 shell 别名,这些别名将始终使用 C/C++ 标准的 "latest" 版本,gcc/g++/clang/clang++(C 的一个别名,C++ 的一个别名)。我意识到这可能有多种解释:

...但是为了这些 shell 别名的目的,我不在乎 使用哪个 "moving" 值只要据我所知,上述规则中的哪一条用于确定使用哪种标准模式。

这两个编译器是否包含跟踪移动的参数别名"latest standard"?我在 GCC 文档中没有看到任何别名选项的提及(尽管我的 google-fu 可能只是让我失望);同时,Clang 用户手册提到 "The supported modes for C are [explicit std modes...] and various aliases for those modes",但我看不到别名本身的记录位置。

你提到的任何编译器都没有这样的选项。

但是,为沙箱创建包含适当设置的简单 Makefile 非常容易。我使用这样的东西:

CFLAGS = -Wall -std=c11 -D_XOPEN_SOURCE_=700
CXXFLAGS = -Wall -std=c++14 -D_XOPEN_SOURCE_=700

默认构建规则可满足我的其余需求,因此无需将所有源文件的名称和依赖项填充到 makefile 中,前提是我始终对单个文件可执行文件进行沙盒处理。

这样,我只需键入 make foo 即可编译 foo.cfoo.cc。 (或者 make foo.o 如果我不想要 link。)功能测试宏设置让我不必记住在我的源文件中也这样做。

并使用非默认编译器进行编译:make foo CXX=clang++。这仍然比 clang++ -Wall -o foo foo.cc

少打字

(其实我用的那个比那个复杂一点,里面包含了.S的后缀规则和一些变量来简化设置优化和调试选项,但是原理是一样的。)

最简单的解决方案是什么也不做,或者更具体地说,避免使用 -std=

编译器本身会随着版本的发布而提高其默认模式,通常是在开发人员对标准版本的实现充满信心时。这接近您的标准:

The latest standard fully implemented by the compiler (e.g. C++11 for GCC 4.9, C++14 for GCC 5+)

虽然也增加了成熟度。