是否可以编写一个输出到显示器的严格符合 C 程序?

问题描述 投票:0回答:1

根据 ISO/IEC 9899:2017:

严格符合标准的程序应仅使用本文档中指定的语言和库的那些功能。 它不应产生依赖于任何未指定、未定义或实现定义的行为的输出, 并且不应超过任何最小实现限制。

然而,几页之后,它说:

活动位置是显示设备上

fputc
功能输出的下一个字符出现的位置。将打印字符(由
isprint
函数定义)写入显示设备的目的是在活动位置显示该字符的图形表示,然后将活动位置前进到当前行的下一个位置。书写方向是特定于语言环境的。 如果活动位置在一行的最后位置(如果有的话),则显示设备的行为未指定。

由于似乎没有任何方法可以判断活动位置是否在一行的最终位置,因此无法在不冒调用未指定行为的风险的情况下输出到显示设备,因此无法编写一个严格符合的程序。这是一个错误还是我遗漏了什么?

c output standards standards-compliance unspecified-behavior
1个回答
2
投票

由于似乎没有任何方法可以判断活动位置是否在一行的最终位置,因此没有办法在不冒调用未指定行为的风险的情况下输出到显示设备

同意,但对严格符合程序的要求不是避免所有未指定的行为,而是

它不应产生依赖于[未指定行为等的输出。 al]

产生的输出是程序的一个函数。该输出指向的设备的行为是该设备的一个功能,与输出本身分开,并且该行为是否被指定或明确定义与程序是否严格符合无关。

是否可以编写一个输出到显示器的严格符合 C 程序?

严格符合的程序不可能知道或控制它产生的任何输出是否定向到 (a) 显示。但如果是,那不会影响程序的一致性。从这个意义上讲,是的,可以编写输出到显示设备的严格符合要求的程序。这样做并不比编写一个输出到常规文件的严格符合要求的程序更难。

© www.soinside.com 2019 - 2024. All rights reserved.