C++ C+中是否存在FENV#u ACCESS pragma+;11岁及以上?
在阅读一份针对的错误报告时,我遇到了一个: 设置舍入模式而不在上使用pragma STDC FENV_访问将调用未定义的行为。见C117.6.1/2。(这个实用主义在C++中不存在,所以不可用,但这不是我们的错……)C++ C+中是否存在FENV#u ACCESS pragma+;11岁及以上?,c++,pragma,fenv,C++,Pragma,Fenv,在阅读一份针对的错误报告时,我遇到了一个: 设置舍入模式而不在上使用pragma STDC FENV_访问将调用未定义的行为。见C117.6.1/2。(这个实用主义在C++中不存在,所以不可用,但这不是我们的错……) 这真的真的不存在于C++中,渲染 不可用吗?我曾尝试在C++11标准中搜索它,但实际上根本没有提到它。pragmas是否与函数原型一起从C继承?或者,它们实际上不需要避免UB,因为C++标准没有在不使用语用时(不提及语法)的情况下对行为进行任何定义吗? < P>我搜索了2015标准
这真的真的不存在于C++中,渲染<代码> <代码>不可用吗?我曾尝试在C++11标准中搜索它,但实际上根本没有提到它。pragmas是否与函数原型一起从C继承?或者,它们实际上不需要避免UB,因为C++标准没有在不使用语用时(不提及语法)的情况下对行为进行任何定义吗?
< P>我搜索了2015标准草案文本,没有发现FunviAccess的出现。也没什么 但是,确实提到了它(因为它不在标准中,我认为我们必须假设这充其量只是咨询信息): 引用自cplusplus.com:(强调我的) 如果设置为on,程序将通知编译器它可能访问浮点环境以测试其状态标志(异常),或在默认情况下不在控制模式下运行 如果设置为off,编译器可能会执行某些优化,这些优化会破坏这些测试和模式更改,因此在上述情况下访问浮点环境会导致未定义的行为 此杂注的默认状态是打开还是关闭取决于编译器设置和库实现。 鉴于令人不安的缺乏明确性,如果可能的话,我想避免使用它 和以往一样,如果使用是不可避免的,我希望将其封装到一个类中,我可以专门为每个体系结构进行测试 然后记录该类的存在,以及如果编译器、环境或库实现升级,它可能导致的问题 更新: <> P>在C++标准中有一个非常简短的标题: §26.3浮点环境[cfenv] 标题定义了与C标准第7.6条相同的所有函数、类型和宏 更新: 详情请参阅:我的理解是,pragma是由C11标准定义的,而不是C++11标准。因此,在C++程序中使用严格执行/未定义。这将需要卷起袖子,并编写并提交LLVM补丁。当开源让你修复这些东西时,这很好。@HansPassant你是什么意思?LLVM修补程序如何解决标准中的问题?在单词
下提到它,以下三个pragma是由C语言标准定义的
。CPLUPLPLUS似乎断言它们在C++中工作,但这种说法似乎是毫无根据的。“鲁斯兰也许更好的措辞是“可能取决于您的实现,也可能不起作用”。?这是否意味着这是一个应该报告和修复的语言缺陷?这意味着在已经存在的11个错误报告中再添加一个错误报告是没有用的。正如我所说,必须有人卷起袖子来解决这个常见的问题。@Ruslan一些未定义的东西并不意味着它一定是一个bug或缺陷。我想问题是,没有它,你还能写连贯的程序吗?