首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >xlC警告,“NOSTRICT选项有可能改变程序的语义”

xlC警告,“NOSTRICT选项有可能改变程序的语义”
EN

Stack Overflow用户
提问于 2017-09-01 07:14:10
回答 1查看 756关注 0票数 0

我正在GCC编译农场和GCC119上进行测试。GCC119是一台AIX机器,具有xlC 13.1编译器。我对平台和编译器知之甚少。

当我在xlC下构建时:

代码语言:javascript
运行
复制
$ 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手册位于编译器参考v13.1。它没有提到STRICTNOSTRICT。基于关键字搜索的最接近的方法是讨论__C99_RESTRICT-qkeyword=restrict生效时的情况。此外,没有手册页:

代码语言:javascript
运行
复制
$ 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告诉我它正在抱怨的源文件和行号?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-01 14:16:36

如果您查找有关-qstrict和-qnostrict选项的信息,您应该在PDF格式中的HTML格式或第349页(如果按页码)或第367页(如果您正在使用PDF页面高级程序)中找到。

由于您使用的是-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正在寻找反馈。

IBM /C++用于AIX,V13.1的完整文档可以在HTML格式PDF格式中找到。有几本“书籍”组成了完整的编译器文档,包括编译器参考。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45995061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档