标签: kr-c

ANSI C和K&R C之间的主要区别是什么?

关于ANSI C维基百科文章说:

ANSI C标准化过程的目标之一是生成K&R C(第一个发布的标准)的超集,其中包含随后引入的许多非官方特征.但是,标准委员会还包括一些新功能,例如函数原型(借用C++编程语言)和更强大的预处理器.参数声明的语法也已更改,以反映C++样式.

这让我觉得有差异.但是,我没有看到K&R C和ANSI C之间的比较.是否有这样的文件?如果没有,主要区别是什么?

编辑:我相信K&R书的封面上写着"ANSI C".至少我相信我在家里的版本确实如此.那么也许没有什么区别了?

c kr-c c89

43
推荐指数
4
解决办法
4万
查看次数

功能声明:K&R与ANSI

K&R函数声明和ANSI函数声明之间有什么区别?

c kr-c

35
推荐指数
2
解决办法
3万
查看次数

在C中注册变量使用的一个很好的例子是什么?

我正在通过K&R阅读并找到关于寄存器变量的小部分,并想知道这里的人是否有一些很好的例子付诸实践.

来自K&R的4.7节:

寄存器声明看起来像
寄存器int x;
注册char c;

要清楚,我只是希望看到一些很酷的代码示例.我(我很确定我)理解主题,所以不要觉得需要输入详细的解释(除非你想).

c kr-c kernighan-and-ritchie cpu-registers

32
推荐指数
2
解决办法
3万
查看次数

(K&R)至少内部名称的前31个字符是重要的?

从字面上看,它是有道理的,但它究竟是什么意思成为变量名称的重要字符?

我是使用K&R开始学习C语言的人.这是本书的直接引用:

"至少内部名称的前31个字符是重要的.对于函数名称和外部变量,数字可能小于31,因为外部名称可能被汇编程序和加载程序使用,语言无法控制.对于外部名称,该标准仅保证6个字符和一个案例."

顺便说一句,"单一案例"是什么意思?

c variables kr-c names

14
推荐指数
2
解决办法
3478
查看次数

数据类型究竟是如何在计算机中表示的?

我是一名读K&R的初级程序员,我觉得这本书假定了很多以前的知识.令我困惑的一个方面是内存中变量的实际表示,或者我应该说存在.数据类型到底为变量指定了什么?我不太确定如何说出这个问题......但我会问几个问题,也许有人可以为我提出一个连贯的答案.

当使用getchar()时,我被告知使用类型"int"比键入"char"更好,因为"int"可以容纳更多值而"char"只能容纳256个值.由于我们可能需要变量来保存EOF值,因此我们需要超过256个,否则EOF值将与256个字符中的一个重叠.在我看来,我认为这是一堆空洞的盒子.有人能给我一个更好的代表吗?这些"盒子"有索引号吗?当EOF与256个可用值中的值重叠时,我们可以预测它将与哪个值重叠吗?

另外,这是否意味着数据类型"char"只能在我们简单地手动为变量赋值时使用,例如char c ='a',当我们肯定知道我们只有256个可能的ASCII时字符?

另外,"char"和"int"之间的实际重要区别是什么?如果我们可以使用"int"类型而不是"char"类型,为什么我们决定在某些时候使用一个而不是另一个?是保存"记忆"(我使用引号,因为我实际上并不是"记忆"究竟如何工作).

最后,char类型的256个可用值究竟是如何获得的?我读了一些关于modulo 2 ^ n的内容,其中n = 8,但为什么这样做(与二进制有关?).什么是"modulo 2 ^ n"的模数部分(如果它与模运算有任何相关性,我看不到关系......)?

c types kr-c kernighan-and-ritchie

11
推荐指数
4
解决办法
4969
查看次数

ungetc(或从K&R取消工作)的目的是什么?

任何人都可以向我解释ungetch的目的吗?这是来自K&R第4章,您可以在其中创建反向波兰计算器.

我没有调用ungetch就运行了程序,在我的测试中它仍然可以正常工作.

 int getch(void) /* get a (possibly pushed back) character */
    {
        if (bufp > 0)
        {
            return buf[--bufp];
        }
        else
        {
            return getchar();
        }
    }

    void ungetch(int c) /* push character back on input */
    {
        if (bufp >= BUFSIZE)
        {
            printf("ungetch: too many characters\n");
        }
        else
        {
            buf[bufp++] = c;
        }

}
Run Code Online (Sandbox Code Playgroud)

(我已经删除了getch中的三元运算符以使其更清晰.)

c kr-c kernighan-and-ritchie

10
推荐指数
2
解决办法
9696
查看次数

K&R第1章 - 练习22解决方案,你怎么看?

我从k&r学习C作为第一语言,我只是想问,如果你认为这个练习是以正确的方式解决的,我知道它可能不像你想的那样完整,但是我想要的意见,所以我知道我正在学习C.

谢谢

/* Exercise 1-22. Write a program to "fold" long input lines into two or
 * more shorter lines, after the last non-blank character that occurs
 * before then n-th column of input. Make sure your program does something
 * intelligent with very long lines, and if there are no blanks or tabs
 * before the specified column.
 * 
 * ~svr
 *
 * [NOTE: Unfinished, but functional in a generic capacity]
 * Todo:
 * Handling of spaceless lines
 * …
Run Code Online (Sandbox Code Playgroud)

c kr-c

10
推荐指数
2
解决办法
1607
查看次数

在我出生之前C是怎么样的?

这是一个问题,C(K&R C)是怎样的?问题是关于C生命的前十年或二十年?

我知道,好吧,我从我的大学教授那里听到它们,C没有我们今天用ANSI C获得的标准库.他们曾经在包裹的程序集中编写IO例程!第二件事是K&R的书,是程序员阅读的最好的书之一,这就是我的教授告诉我们的:)

我想更多地了解一下好的C'.例如,与ANSI C相比,您对它有多大的了解,或者C如何改变程序员对编程的关注?


只是为了记录,我在主要阅读这两篇论文后问这个问题:

我知道它们是关于C++的!这就是为什么我想了解更多关于C的原因,因为这两篇论文是关于C++是如何从C诞生的.我现在在询问它之前的样子.感谢Lazarus指出第一版K&R,但我仍然渴望从SO大师那里了解更多关于C的信息;)

c kr-c

9
推荐指数
3
解决办法
1121
查看次数

正确声明ANSI C中的main()函数

C标准说:

程序启动时调用的函数名为main.该实现声明此函数没有原型.它应该使用int的返回类型定义,并且没有参数:

int main(void) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

或者有两个参数(这里称为argc和argv,虽然可以使用任何名称,因为它们是声明它们的函数的本地名称):

int main(int argc, char *argv[]) { /*
... */ }
Run Code Online (Sandbox Code Playgroud)

或等效的或以某种其他实现定义的方式.

但是,Kernighan&Ritchie在他们的第二版(规范的ANSI C)圣经中使用:

main()
{
  /* taram pampam ... */

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

谁是对的?它是否与函数没有返回值自动假设int在C中返回?

c kr-c

9
推荐指数
1
解决办法
6553
查看次数

K&R Qsort示例与指针和阵列混淆

我发现很难理解以下代码片段.我理解指向功能矫揉造成的指针,但我发现混淆在指示的行中.

void qsort(void **v, int left, int right, int (*comp) (void *, void *))
{
    int i, last;
    void swap(int **v, int i, int j);

    if (left >= right)   /* do nothing if array contains */
        return;           /* fewer than two elements */
    swap(v, left, (left + right)/2);   /* move partition elem */ [1]
    last = left;                       /* to v[0] */ [2]
    for (i = left + 1; i <= right; i++) /* partition */ [3]
        if ((*comp) (v[i], v[left]) …
Run Code Online (Sandbox Code Playgroud)

c kr-c

8
推荐指数
2
解决办法
3259
查看次数

标签 统计

c ×10

kr-c ×10

kernighan-and-ritchie ×3

c89 ×1

cpu-registers ×1

names ×1

types ×1

variables ×1