问题标签 [c17]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
82 浏览

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

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

C11(6.10.3.2 # 运算符):

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

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

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

0 投票
2 回答
140 浏览

c - 是否有一种标准方法可以保证在编译(翻译)时评估某个(常量)表达式?

我很惊讶 C 不能保证在编译(翻译)时评估某些(常量)表达式。

C11(6.6 常量表达式)(强调):

可以在翻译期间而不是运行时评估常量表达式,...

因此,有两个问题:

  1. 是否有一种标准方法可以保证在编译(翻译)时评估某个(常量)表达式?
  2. 额外的问题:为什么C不保证呢?保证它的(技术)障碍是什么?
0 投票
1 回答
77 浏览

c - 是否有一种标准方法可以在编译时检查该文件是否仅被预处理?

__MY_CC__上下文:不支持除此之外的所有编译器。但是,如何只允许使用第 3 方编译器进行预处理?

UPD。我试图解决的根本问题:

  1. 考虑名为t0.c.

  2. 要求t0.c

    一个。t0.c允许仅使用编译器进行my_cc编译。不支持其他编译器(因为t0.c包含特定于目标的代码)。

    湾。t0.c还包含一些元信息。元信息在t0.c预处理后可用。

    C。元信息将在没有my_cc编译器的环境中使用。(这意味着它t0.c不仅被设计为编译,而且只是被预处理,即不执行后续翻译阶段。)因此,t0.c需要允许使用任何符合要求的实现(以下称为cc)进行预处理,即不是my_cc

  3. 如何满足这样的要求?

用户 Paul Hankin 提出了以下方法:

这段代码:

  1. 将与my_cc. 好的。
  2. cc由于语法错误(例如为 clang 给出),将不会与 一起编译:

好的。

  1. 使用生成的翻译单元进行预处理后,cc -E将包含"compiler not supported",这是不可取的,因为:

    一个。预计翻译单元不包含任何额外的开销(例如字符串)。

    湾。它打破了要求:cc -E 支持

不好。

我们可以将 更改"compiler not supported""compilation using non __MY_CC__ is not supported"。但是,预计在t0.c预先拥有之后,生成的翻译单元不包含任何额外的开销(例如字符串)。有没有无开销的解决方案?

0 投票
4 回答
191 浏览

c - C 标准的哪些部分证明了整数类型大小之间的关系?

在 C11 [C11_N1570]和 C17 [C17_N2176]的后期草稿中,我找不到以下证明(我相信,这是众所周知的):
sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
有人可以向我推荐特定的部分吗?

我知道 C++11 的这个回复。回复的第二部分谈到了 C,但只涉及values 的范围。它不能证明字体大小之间的比例。

0 投票
0 回答
34 浏览

formatting - 在 C17 中对齐/格式化输出值

视觉工作室 2019,C17

我无法弄清楚如何使用不同的输入数据获取示例中的输出。

0 投票
1 回答
73 浏览

c - printf("%a"): 十六进制浮点常量的格式和参数如何选择?

考虑这个简单的代码(t0.c):

调用和输出:

问题:对于转换说明符%a,如何:

  • 选择了十六进制浮点常量的确切格式,并且
  • 这个十六进制浮点常数的参数选择?

例如,为什么0x1.2p-1070而不是0x0.0000000000012p-1022(或其他变体)(反之亦然)?

0 投票
3 回答
90 浏览

c - 术语“格式说明符”是术语“转换说明符”的同义词吗?

C11 和 C17 标准都使用术语“转换说明符”和“格式说明符”。它们是同义词吗?如果是,那么为什么要引入同义词?如果不是,那么它们之间有什么区别?

0 投票
1 回答
96 浏览

c - 是否有任何 C 编译器能够检测到违反“严格符合程序”的情况?

是否有任何 C 编译器能够检测*违反“严格符合程序”的情况?

* 在某些选项下,例如,--accept-only-strictly-conforming-program

如果不是,那么使用哪些工具来检测违反“严格符合程序”的情况?

信息丰富(C11, 4. 一致性,p5):

严格遵守的程序应仅使用本国际标准中指定的语言和库的那些特性。3) 它不应产生依赖于任何未指定、未定义或实现定义的行为的输出,并且不应超过任何最小实现限制。

0 投票
3 回答
93 浏览

c - 是否有标准方法来禁止读取(通过赋值)变量?

众所周知且有用的功能是:

  • const类型限定符禁止写入(修改)变量
  • register存储类说明符禁止获取变量的地址

但是,是否有一种标准方法来禁止读取(通过赋值)变量?

例如,对于此类变量,仅允许写入和/或获取地址。

问题的原因:需要有条件地禁止读取(通过赋值)某些变量。该语言是否提供了任何方法来做到这一点?如果不是,那为什么?

UPD。读者可能也会感兴趣:C:在编译时或运行时检查变量是否具有静态存储类说明符

0 投票
1 回答
89 浏览

c - C 函数声明链接

我对C17 标准中的一个主题有点困惑。

在 6.2.2 的第 5 点中,您可以阅读:

如果函数标识符的声明没有存储类说明符,则它的链接将完全确定,就好像它是使用存储类说明符 extern 声明的一样。[...]

这意味着它可以具有内部或外部链接,具体取决于该函数之前的其他声明(如果有)。

另一方面,在 6.7.6.3 示例 1(第 16 和 17 点)中,您可以阅读:

[...]

如果声明出现在任何函数之外,则标识符具有文件范围和外部链接。[...]

所以,没关系pfi(它不是一个函数,而是一个指针),但是fand会发生什么fip?这不是矛盾吗?在 6.2.2 中,它“好像存在外部存储类说明符”(这并不总是意味着它将具有外部链接),但在 6.7.6.3 中,外部链接似乎是理所当然的。

我错过了什么?

编辑:更具体地说,如果我们在文件范围内有此代码:

6.2.2 声明第二个声明具有内部链接

6.7.6.3 声明第二个声明具有外部链接