【发布时间】:2015-02-21 14:28:57
【问题描述】:
1. 8.2 第171页Low Level I/O - Read and Write
#include "syscalls.h"
int getchar(void)
{
char c;
return (read(0, &c, 1) == 1) ? (unsigned char) c : EOF;
}
在 return 语句中将 c 转换为
unsigned char消除了符号扩展的任何问题。
我们在这里讨论的是什么问题?为什么是unsigned char?没有演员 unsigned char 会发生什么?
2。 A7.4.8 第 204 页 Sizeof Operator
当应用于结构或联合时,结果是对象中的字节数,包括使对象平铺数组所需的任何填充:n个元素的数组的大小是n 倍于一个元素的大小
将对象平铺成数组是什么意思?我们在谈论结构和联合,突然间这个数组是怎么出现在这里的?这个肯定看起来像一个错字,但我已经检查了Errata for K&R 的所有查询。所以很可能我遗漏了一些东西,或者我的非母语英语无法正确掌握。
3. A7.17 第209页Assignment Expressions
以下其中一项必须为真:
<snip>;或者两个操作数都是指向类型相同的函数或对象的指针,但右侧操作数中可能缺少const或volatile。
请用代码解释。 int a, b 之类的东西是具有相同类型的两个对象。等等
4. A12.5 第 232 页 Conditional Compilation
除了检查条件的嵌套之外,由条件的非活动臂控制的文本将被忽略。
再次,请用代码解释。
5. B1.4 第247页ungetc(int c, FILE *stream)
保证每个流只能回推一个字符。
这是否意味着我只能在程序/软件中使用一次ungetc?
1. B.1.1 第 242 页 File Operations
int rename (const char *oldname, const char *newname)
rename 是一个stdio 库例程,那么为什么它不在man -s3 rename 中,而是在man -s2 rename 中?我正在使用 Ubuntu 13.10 顺便说一句。
【问题讨论】:
-
这是一系列问题。你需要一个辅导员。
-
谢谢,但现在我没有。帮助我解决任何一个问题怎么样? ;)
-
你应该问一个问题。 “你能回答我所有的问题吗?”不算数:-)
-
rename在2中,因为它主要是一个系统调用——依赖于操作系统。这优先于“标准函数”,因为如果没有,“系统调用”部分将为空。无论如何,在man页面的主题上问“为什么”通常会导致自以为是的讨论。 -
@juanchopanza- 发布 6 个标题为
"K&R edition 2 - Doubt %d", i的问题对我来说似乎比发布一个汇总所有疑问的帖子更令人讨厌。也许这是一个错误的举动。
标签: c c89 kernighan-and-ritchie