c++ - xlC 警告, "The NOSTRICT option has the potential to alter the semantics of a program"

标签 c++ aix xlc

我正在 GCC Compile Farm 和 GCC119 上进行测试。 GCC119 是带有 xlC 13.1 编译器的 AIX 机器。我对平台和编译器知之甚少。

当我在 xlC 下构建时:

$ CXX=xlC gmake CXXFLAGS="-DNDEBUG -g2 -O3 -qrtti" -j 8
xlC -DNDEBUG -g2 -O3 -qrtti -c cryptlib.cpp
xlC -DNDEBUG -g2 -O3 -qrtti -c cpu.cpp
...
xlC -DNDEBUG -g2 -O3 -qrtti -c hmac.cpp
1500-036: (I) The NOSTRICT option (default at OPT(3)) has the potential to alter the 
semantics of a program.  Please refer to documentation on the STRICT/NOSTRICT option
for more information.
...

编译器的 IBM 手册位于 Compiler Reference v13.1 .它没有提到 STRICTNOSTRICT。基于关键字搜索最接近的是当 -qkeyword=restrict 生效时对 __C99_RESTRICT 的讨论。此外,没有手册页:

$ man NOSTRICT
Manual entry for NOSTRICT not found or not installed.
$ man 3 NOSTRICT
There is not an entry for NOSTRICT in section 3.
$ man STRICT
Manual entry for STRICT not found or not installed.
$ man 3 STRICT
There is not an entry for STRICT in section 3.
$ man OPT
Manual entry for OPT not found or not installed.
$ man 3 OPT
There is not an entry for OPT in section 3.

当我使用 -qflag=w 编译时,警告消失了,所以我可以使用的信息更少。 (库和程序使用 -qflag=w 编译干净)。

我有两个问题。首先,xlC 到底在提示什么?其次,是否可以让 xlC 告诉我它提示的源文件和行号?

最佳答案

如果您要查找有关 -qstrict 和 -qnostrict 选项的信息,您应该在 HTML format 中找到它,或第 349 页(如果您按页码查找)或第 367 页(如果您使用 PDF 页面推进器)在 PDF format .

由于您使用的是 -O3 (OPT(3)),如消息所述,默认情况下 -qnostrict 选项有效,这意味着与使用 -qstrict 编译相比,执行更积极的优化以创建一个更快的可执行文件,代价是在你的程序中有轻微的语义差异。查看文档(复制在下面)以了解其具体含义;如果下面提到的任何差异对您很重要,请使用 -O3 -qstrict 进行编译以防止发生这些语义差异,但您的应用程序性能可能不会那么好。

启用 -qnostrict 后,将启用以下优化:

  • 可能导致异常的代码可能会重新排列。相应的异常可能发生在不同的执行点,也可能根本不发生。 (编译器仍然试图尽量减少这种情况。)
  • 浮点运算不能保留零值的符号。 (要确保保留此符号,您还需要指定 -qfloat=rrm、-qfloat=nomaf 或 -qfloat=strictnmaf。)
  • 浮点表达式可以重新关联。例如,如果速度更快,(2.0*3.1)4.2 可能会变为 2.0(3.1*4.2),即使结果可能不同。
  • -qfloat 选项的 fltint 和 rsqrt 子选项已打开。您也可以使用 -qstrict 选项或 -qfloat 的 nofltint 和 norsqrt 子选项再次关闭它们。如果指定了较低级别的优化或未指定优化,这些子选项默认处于关闭状态。

您的 man 命令将无法正常工作,因为 NOSTRICTSTRICTOPT 是编译器选项,不能与 man 一起使用。要查看编​​译器手册页,您需要使用 man xlC

没有与此信息消息关联的源文件和行号信息,因为它是对所有使用 -O3 编译的文件的一般消息。

如果您想就文档(包括手册页、在线文档等)提供反馈,IBM is looking for feedback .

附言IBM XL C/C++ for AIX V13.1 的完整文档可以在 HTML format 中找到或 PDF format .有几本“书”构成了完整的编译器文档,包括编译器引用。

关于c++ - xlC 警告, "The NOSTRICT option has the potential to alter the semantics of a program",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45995061/

相关文章:

c++ - 从列表中删除 boost::shared_ptr 的正确方法是什么?

php - mysql 的 php 扩展

html - 如何使用 shell/bash 将 txt 转换为 html 格式

c++ - 确定用于在 *ix 操作系统上构建共享对象的编译器和版本

c++ - 与直接编译的可执行文件相比,linux .so 性能下降

c++ - 如何将输出从1更改为星期一?

c++ - C++编码样式

shell - 'date --date' 的 AIX 等效项

makefile - 使用 xlc 编译器的 GNU make

c++ - 显式模板实例化在 XLC 上产生编译错误,但在其他编译器上有效