kernighan-and-ritchie相关内容

在目录上使用 `read` 系统调用

我正在查看 K&R 2 中的示例(8.6 示例 - 列表目录).它是 Linux 命令 ls 或 Windows 的 dir 的精简版.该示例显示了 opendir、readdir 等函数的实现.我已经尝试逐字输入代码,但它仍然不起作用.它所做的只是打印一个点(针对当前目录)并退出. 我在代码中发现了一件有趣的事情(在 readdir 的实现中),它正在调用像 open 和 read 在目录 ..

`getchar()` 在哪里存储用户输入?

我已经开始阅读“C 编程语言" (K&R) 并且我对 getchar() 函数有疑问. 例如这段代码: #include 主要的(){国际 c;c = getchar();putchar(c);printf("\n");} 输入 toomanychars + CTRL+D (EOF) 只打印 t.我认为这是意料之中的,因为它是引入的第一个角色. 然后是另一段代码: #includ ..
发布时间:2022-01-04 08:37:22 其他开发

## 预处理器运算符的应用和需要考虑的问题是什么?

正如我之前的许多问题中所提到的,我正在使用 K&R,目前正在使用预处理器.更有趣的事情之一—从我之前尝试学习 C 的任何尝试中我从未知道的东西 -mdash;是 ## 预处理器运算符.根据 K&R: 预处理操作符##提供了一种连接实际的方法宏扩展期间的参数.如果一个替换文本中的参数是与 ## 相邻,参数为替换为实际参数,## 和周围的空白是删除,并重新扫描结果.例如,宏 paste连接它的两 ..

函数声明与原型的替代 (K&R) C 语法

这种 C 语法有什么用处——使用“K&R"风格的函数声明? int func (p, p2)无效* p;国际 p2;{返回0;} 我能够在 Visual Studios 2010beta 中编写此代码 //是的,参数被翻转无效 f(){无效* v = 0;功能(5,v);} 我不明白.这个语法有什么意义?我可以写: int func (p, p2)国际 p2;{返回0;}//和写int ..

argv 指向指针数组的指针

我对以下段落如何与它后面的代码匹配感到困惑: 由于 argv 是一个指向指针数组的指针,我们可以操作指针而不是索引数组.下一个变体基于增加 argv,它是一个指向 char 的指针,而 argc倒计时: #include /* 回显命令行参数;第二个版本 */main(int argc, char *argv[]){而 (--argc > 0)printf("%s%s", *++argv, ..
发布时间:2021-11-17 21:14:27 其他开发

从非空函数的末尾掉下来时写入未使用的参数的返回值

在这个高尔夫答案中,我看到了一个技巧,其中返回值是未传入的第二个参数. int f(i, j){j = i;}int main(){返回 f(3);} 从 gcc 的汇编输出,当代码复制 j = i 时看起来像code> 它将结果存储在 eax 中,它恰好是返回值. f:pushq %rbpmovq %rsp, %rbpmovl %edi, -4(%rbp)movl %esi, -8(%rb ..
发布时间:2021-09-29 19:29:32 其他开发

未使用参数中的返回值

在这个高尔夫答案中,我看到了一个窍门,其中返回值是第二个未传递的参数 int f(i,j){j = i;}int main(){返回f(3);} 从 gcc的汇编输出中,看起来就像代码复制 j = i 将结果存储在恰好是返回值的 eax 中. f:pushq%rbpmovq%rsp,%rbpmovl%edi,-4(%rbp)movl%esi,-8(%rbp)movl -4(%rbp), ..
发布时间:2021-05-09 20:54:07 其他开发

在不带参数的函数的声明中指定使用void是否解决了最令人头疼的解析问题?

最令人烦恼的解析是否根源于是否将void用作不带参数的函数声明的参数的含糊不清? 作为示例,以下代码可以在g ++(v7.2.1)和Xcode(Apple LLVM版本7.0.2(clang-700.1.81))编译器上正确编译,并且不会出错. #include int asdf(void); int asdf(int a) { return a; } ..
发布时间:2020-06-29 19:01:12 C/C++开发

字符转换为整数的微妙之处

有人可以清楚地解释一下K& R中的这些行的实际含义: "将字符转换为int时,它能否产生负数 整数?答案因计算机而异.的定义 C保证机器标准打印中的任何字符 字符集永远不会是负数,而是任意的位模式 存储在字符变量中的变量在某些情况下可能看起来为负数 机器,但对其他人持肯定态度." 解决方案 您需要先了解几件事. 如果我采用8位值并将其扩展为16位值,通常您会想像只是在左边加上一 ..
发布时间:2020-06-29 19:01:09 其他开发

getop()函数K& R book第78页

我正在学习K& R书.目前,我正在阅读第78页的getop()函数. 我确实了解代码,但是我需要澄清两件事. getop()的代码如下: int getch(void); void ungetch(int); /* getop: get next character or numeric operand */ int getop(char s[]) { int i, c; ..
发布时间:2020-06-29 19:01:00 其他开发

K& R练习1-20-需要澄清

我不完全理解以下练习要问的内容: “编写一个程序detab,用适当数量的空格替换输入中的制表符,以留出下一个制表位.假定一组固定的制表位,例如每n列.是变量还是符号参数?" 有人可以澄清粗体部分吗? 解决方案 此练习要求您通过添加正确数量的空格来模拟制表符的行为,以使输出仍在制表符停止位置对齐. 例如: "hello\tworld" 应成为: "hello ..
发布时间:2020-06-29 19:00:57 其他开发

如何用C编写C编译器?

这个问题可能源于我对编译器的误解,但是这里... 可以在第一版K& R(第xi页)的序言中找到以下陈述: 操作系统, C编译器以及基本上所有的UNIX应用程序(包括用于编写本书的所有软件)都是用C编写的. (我的重点) 这是我不明白的地方:C编译器在编译任何C代码之前是否必须先进行自身编译?如果该C编译器是用C编写的,那么编译它是否需要已经存在的C编译器?! 摆脱这种 ..
发布时间:2020-06-29 19:00:54 其他开发

我想了解K& R的练习1-21

这是我要理解的问题: 写一个程序"entab",该程序用最少的空格替换字符串 制表符和空格的数量以实现相同的间距.当一个 制表符或单个空格就足以达到制表位,这应该 被赋予优先权? 解码问题: a .这是一个在输入中插入“标签"的程序. b .如果字符串由连续的空格组成,则这些空格 空格必须替换为最少的制表符和空格. 该程序在以下输入中应如何表现: 嘿***** ..
发布时间:2020-06-29 19:00:51 其他开发

这条线的目的是什么? (函数声明)

我正在通过K& R学习编程.到目前为止进展顺利,但是我不清楚第1.8节(函数)中的一行代码的作用. 在1.8节中,作者向您展示了如何创建一个函数以将一个整数提高为另一整数的幂. 我粘贴了下面的代码,就像书中写的一样.一切输出正常.但是我不知道为什么他们在顶部添加了这一行: int power(int m, int n); 书中没有提到它,除了说程序会将整数m乘幂n.如果我从代 ..
发布时间:2020-06-29 19:00:48 其他开发

C数组计数(初学者)

我目前正在阅读Kernighan&的"The C Programming Language" Richie和我正在努力弄清生产线的功能.我想我只是有点愚蠢,还不太了解他们的解释. ++ndigit[c-'0']; 我不得不稍稍更改程序,就像以前ndigit给我的垃圾值一样,所以我只是将数组实例化为0,而不是使用for循环遍历它,并以这种方式更改值. #include ..
发布时间:2020-06-29 19:00:46 其他开发

EOF练习1-6 K& R C编程语言

这直接取自《 K& R》一书: !=的优先级高于=的优先级,这意味着在没有括号的情况下,关系测试!=将在赋值=之前进行.因此,声明 c = getchar() != EOF 等同于 c = (getchar() != EOF) 这具有将c设置为0或1的不良效果,具体取决于getchar的调用是否返回文件末尾. (有关更多信息,请参见第2章.) 练习1-6.验证表达式 ..
发布时间:2020-06-29 19:00:43 其他开发

如何模拟EOF?

我目前正在阅读K& R的书,并输入第一部分中的示例,并且有两个示例,如下所示: while((c = getchar()) != EOF) { //do something } 我正在Windows盒子上测试这些示例,因此从cmd提示符下运行编译的exe文件. 要测试上面的示例,如何模拟EOF?也就是说,从命令提示符测试示例时,基本上如何使循环停止? 解决方案 要输 ..
发布时间:2020-06-29 19:00:40 其他开发