问题标签 [kernighan-and-ritchie]
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.
c - C 宏处理
我正在考虑编写能够处理宏的C定义处理器的最佳方法。不幸的是,我没有想到任何聪明的东西。它的行为应该与C中的一个完全一样,因此它处理如下表达式:
或这个:
我知道 K&R2 的安装和查找功能,我还需要什么来替换括号内的文本?有没有人有任何建议或一些伪代码?我知道这是一项复杂的任务,但是,最好的方法是什么?
c - (K&R) 内部名称的前 31 个字符是否有效?
从字面上看,这是有道理的,但是作为变量名的重要字符究竟意味着什么?
我是使用 K&R 的 C 初学者。这是书中的直接引述:
“至少内部名称的前 31 个字符是重要的。对于函数名称和外部变量,该数字可能小于 31,因为外部名称可能被语言无法控制的汇编程序和加载程序使用。对于外部名称, 标准只保证 6 个字符和一个大小写。”
顺便问一下,“单例”是什么意思?
c - 修改 detab 以接受制表位列表
这是我的 detab 版本,来自这个 K&R 练习:
修改 detab 以接受制表位列表作为参数。如果没有参数,请使用默认选项卡设置。
我的问题是,如果有多个参数——例如 5、8、10——假设下一个制表位何时开始处于活动状态?程序应该在什么时候开始使用 TAB_STOP 8 而不是开始的 5?在换行之后或者我应该怎么做?
我也不确定是否应该将所有这些都放入 main 中,还是应该坚持使用单独的功能?
编辑:好的,这就是我尝试过的。
我在正确的轨道上吗?这能行吗?我还没有修改detab。
c - 计算机中的数据类型究竟是如何表示的?
我是一个阅读 K&R 的初级程序员,我觉得这本书好像假设了很多以前的知识。让我感到困惑的一个方面是内存中变量的实际表示,或者我应该说存在。数据类型究竟为变量指定了什么?我不太清楚如何表达这个问题......但我会问几个问题,也许有人可以为我想出一个连贯的答案。
使用 getchar() 时,有人告诉我使用“int”类型比使用“char”类型更好,因为“int”可以保存更多值,而“char”只能保存 256 个值。由于我们可能需要变量来保存 EOF 值,因此我们需要超过 256 个,否则 EOF 值将与 256 个字符之一重叠。在我看来,我认为这是一堆空洞的盒子。有人可以给我一个更好的代表吗?这些“盒子”有索引号吗?当 EOF 与 256 个可用值中的一个值重叠时,我们能否预测它将与哪个值重叠?
另外,这是否意味着数据类型“char”只有在我们简单地手动为变量赋值时才可以使用,例如 char c = 'a',当我们明确知道我们将只有 256 个可能的 ASCII人物?
另外,“char”和“int”之间的实际重要区别是什么?如果我们可以使用“int”类型而不是“char”类型,为什么我们决定在某些时候使用一种而不是另一种呢?是为了节省“内存”(我使用引号,因为我实际上并不知道“内存”是如何工作的)。
最后,这 256 个 char 类型的可用值究竟是如何获得的?我读了一些关于模 2^n 的东西,其中 n = 8,但为什么它会起作用(与二进制有关?)。“模2 ^ n”的模部分是什么意思(如果它与模算术有任何关系,我看不到关系......)?
c - 我需要帮助理解练习 5-12 在 C 编程语言书中的要求
K&R C Programming Language: pg. 105
扩展
entab
并detab
接受简写
entab -m +n
表示制表符停止每一
n
列,从 column 开始m
。
entab
用制表符替换多个空格,detab
反之亦然。我的问题涉及制表位和entab
. 我认为detab
这很容易确定到达下一个制表位所需的空格数,所以不用担心。使用entab
, 用制表符替换空格会稍微困难一些,因为我无法确定制表符到它自己的制表位有多大(除非有办法确定)。
我什至在正确地考虑这件事吗?
c - 找不到 K&R 练习 4-6 的解决方案
在 K&R,我们设法创建了一个 RPN。
现在的练习是:
添加用于处理变量的命令,(很容易提供 26 个具有单字母名称的变量。)为最近打印的值添加一个变量。
所以这有点像 Python 解释器,我们可以这样做:
或 A = 5 _ + A (打印 10)
等等,但我不太确定我想在 C 中如何处理它。我只是感到难过。
c - C中空格的转义序列是什么?
我正在编写一个程序来计算空格、制表符和换行符。我记得制表符和换行符的转义序列是什么,但是空白呢?\b
? 还是那个退格?
c - 为什么这个 C 程序不会选择转义的反斜杠?
我在做 K&R 的练习 1-10
编写一个程序将其输入复制到其输出,将每个制表符替换为
\t
,每个退格替换为 ,\b
每个反斜杠替换为\\
。这使得制表符和退格键以明确的方式可见。
我想出了这个...
出于某种原因,它拒绝触摸反斜杠。例如,当输入一个字符串时,程序的输出Hello how\ are you?
是Hello\thow\ are you?
,这意味着它转换了制表符,但不是反斜杠。
难道我做错了什么?
c - 这个小 C 程序是否满足 K&R 练习?
我开始 K&R 的练习 1-18
编写一个程序来删除每行输入中的尾随空格和制表符,并删除整个空白行。
这是我到目前为止想出的
第二部分听起来很难,因为我不确定如果该行只有空格或制表符,我应该返回什么。毕竟,如果我返回 0,它将停止getline()
调用。这是我应该设置的地方吗#define
,例如ALL_BLANKS
.
无论如何,对于实际的主要问题,这是从行中删除尾随空格和制表符的正确方法吗?我运行了一些输入,它似乎工作。但是,如果我将带有换行符的文本复制并粘贴到 CL 中,它会看起来全部串在一起。当我在 CL 中输入一行并按 Enter 时,它会自动打印出来。我应该构建一个行数组,然后在完成后循环并打印它们吗?
c - C:动态存储字符串(动态大小!)?
我错过了一些非常简单的东西吗?因为我似乎找不到我的代码没有动态存储字符串的原因。当我最后打印它们时,我得到的只是空白行。它应该打印任意行数的最后“n”行。不过,实际行的存储似乎存在问题。任何人都可以伸出援助之手吗?
顺便说一句,这不是硬件。这是 K&R 书中的一个问题(其答案在线)。我正在尝试自己学习C。