小编Pav*_*kin的帖子

为什么在 Java 中 pow(1, qNaN) 是 qNaN 而在 IEEE 754-2008 pow(1, qNaN) 中是 1?

为什么在 Java 中pow(1, qNaN)qNaN而在 IEEE 754 中pow(1, qNaN)1

爪哇:

System.out.println(Math.pow(1, Double.NaN)); // prints NaN (which is qNaN)

$ javac --version
javac 11.0.11
Run Code Online (Sandbox Code Playgroud)

IEEE 754-2008, 9.2.1 特殊值:

pow (+1, y) 对于任何 y 都是 1(即使是安静的 NaN)

java standards-compliance

1
推荐指数
1
解决办法
68
查看次数

条件包含:字符常量的数值:在 #if/#elif 内与不带 #if/#elif:为什么匹配是实现定义的?

案例 A:C11,6.6 常量表达式,语义,5:

如果在翻译环境中计算浮动表达式,则算术范围和精度应至少与在执行环境中计算表达式一样大。116)

这需要以下程序返回 0:

#include <float.h>

#define EXPR DBL_MIN * DBL_MAX

double d1 = EXPR;
double d2;

#pragma STDC FENV_ACCESS ON

int main(void)
{
    d2 = EXPR;
    return d1 == d2 ? 0 : 1;
}
Run Code Online (Sandbox Code Playgroud)

案例 B:C11,6.10.1 条件包含,语义,4:

这些字符常量的数值是否与表达式中(#if 或 #elif 指令除外)中出现相同字符常量时获得的值匹配是实现定义的。168)

不需要以下程序返回 0:

#define EXPR 'z' - 'a' == 25

int main(void)
{
    _Bool b1 = 0;
    _Bool b2;
#if EXPR
    b1 = 1;
#endif
    b2 = EXPR;
    return b1 == b2 …
Run Code Online (Sandbox Code Playgroud)

c constants language-lawyer c-preprocessor implementation-defined-behavior

1
推荐指数
1
解决办法
59
查看次数

如果一元运算符的优先级接近最高,那么为什么 # 和 ## 运算符的计算顺序未指定?

简单的问题:如果一元运算符的优先级接近最高,那么为什么#and##运算符的计算顺序是未指定的?与 C 和 C++ 相关。

C11(6.10.3.2 # 运算符):

# 和 ## 运算符的计算顺序未指定。

C++,N4713(19.3.2 # 运算符):

# 和 ## 运算符的计算顺序未指定。

c c++ language-lawyer c++17 c17

0
推荐指数
1
解决办法
74
查看次数

不支持的标准功能是否会影响一致性?

上下文:C 编译器在实现一致的同时故意不支持某些功能。可以吗?

\n

一些例子。下面的所有编译器都是一致的实现(__STDC__定义为1)。然而:

\n
    \n
  • gcc 不支持#pragma STDC FENV_ACCESS并出现问题warning: ignoring \xe2\x80\x98#pragma STDC FENV_ACCESS\xe2\x80\x99 [-Wunknown-pragmas]。然而, fenv.h 是一个标准头文件,#pragma STDC FENV_ACCESS ON标准要求支持 ,因为是on-off-switch :ON中的选择之一。ON OFF DEFAULT

    \n
  • \n
  • msvc 不支持#pragma STDC FP_CONTRACT,而是支持它自己的版本#pragma fp_contract ( { on | off } )。但是,标准版本是#pragma STDC FP_CONTRACT { ON | OFF | DEFAULT }.

    \n
  • \n
  • Cygwin 上的 gcc:sscanf 不处理十六进制浮点输入。libc 是标准的一部分。

    \n
  • \n
\n

问题:是否允许实现故意提供有限的功能(或其自己的此类功能版本),同时仍然符合实现? …

c standards-compliance language-lawyer c11 c17

0
推荐指数
1
解决办法
99
查看次数

clang: &lt;字符串文字&gt; + &lt;表达式返回 int&gt; 会导致令人困惑的警告:将 'int' 添加到字符串不会附加到字符串

这段代码:

#include <stdio.h>
#include <stdbool.h>

int main(void)
{
  bool flag = true;
  printf("%s\n", "xxxzzz" + ( flag ? 3 : 0 ));
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译时会-std=c11 -pedantic导致警告:

main.c:7:27: warning: adding 'int' to a string does not append to the string
      [-Wstring-plus-int]
  printf("%s\n", "xxxzzz" + ( flag ? 3 : 0 ));
                 ~~~~~~~~~^~~~~~~~~~~~~~~~~~
main.c:7:27: note: use array indexing to silence this warning
  printf("%s\n", "xxxzzz" + ( flag ? 3 : 0 ));
                          ^
                 &        [                 ]
1 warning generated. …
Run Code Online (Sandbox Code Playgroud)

c clang compiler-warnings c11

0
推荐指数
1
解决办法
355
查看次数