Ana*_*bus 3 c stdio return-value output
C17 (N2176) 标准规定,如果没有写入错误,“fputc 函数将返回写入的字符”(7.21.7.3)。
但在这样的背景下
int c ;
// ... later, c is assigned an "interesting" value ...
int k = fputc ( c , stdout ) ;
Run Code Online (Sandbox Code Playgroud)
是
k == c || k == EOF
Run Code Online (Sandbox Code Playgroud)
总是true?即,假设fputc不返回EOF,是否保证返回c?第三种方式,可以fputc写一个不同于第一个参数的字符吗?
例如,如果我请求输出美元符号(不保证在源或执行字符集中,AFAICT),可以'\u0024' != fputc('\u0024', stdout)。也许程序会输出本地货币符号。
问题是
在 C 中,什么时候可以
fputc返回除第一个参数之外的其他参数?
到目前为止(2021-10-20)的部分答案似乎是:
fputc,(unsigned char) c != c假设(unsigned char) c == c, 但(unsigned char) c与执行字符集中的某个字符不匹配。可以fputc写其他字符吗?
例如,假设c == (unsigned char) '\u0024'执行字符集中不存在 (ASCII 美元符号)(因为执行字符集是非 ASCII)。fputc例如,可以写另一个货币符号(或某个任意字符)。
\n\n是
\nk == c || k == EOF正确的吗?
通常是的,但不是。
\n将fputc ( c , stdout ),c转换为 anunsigned char并写入。正是这个值或EOF返回的值。
相反,期待k == (unsigned char) c || k == EOF.
\n\n该函数将由(转换为)
\nfputc指定的字符写入输出流... \n返回:该函数返回写入的字符。如果发生写入错误,则设置流的错误指示符并返回。C17dr \xc2\xa7 7.21.7.3 2-3cunsigned charfputcfputcEOF
一个不太罕见的例子是,当ch从带符号char且值小于 0 的 a 赋值时。函数返回值预计为或[0...UCHAR_MAX]EOF。
例子
\nchar ch = -96;\nprintf("%d %d %d\\n", SCHAR_MIN, ch, fputc(ch, stdout));\nRun Code Online (Sandbox Code Playgroud)\n输出
\n\xef\xbf\xbd-128 -96 160\nRun Code Online (Sandbox Code Playgroud)\n\n\n也许程序会输出本地货币符号。
\n
对于,与和fputc('\\u0024', stdout)相同,所看到的符号是特定于实现的。C 没有指定使用 ASCII,即使它无处不在。C 没有指定字符渲染的字体或形状。不过,很可能会是。fputc(0x24, stdout)fputc(36, stdout)$
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |