原版C你好,来自Kernighan和Ritchie的世界程序未编译

原版C你好,来自Kernighan和Ritchie的世界程序未编译,c,printf,token,C,Printf,Token,我试图用克尼汉和里奇的书(C圣经)来学习C语言。在尝试使用tcc和MinGW(使用Windows)编译第一个问题时。它给了我一个错误信息。最详细的一个来自Min GW: helloworld.c:3:8:错误:在“(”标记)之前应为“)” 这是我的节目: main() ( printf("hello, world\n"); ) 据我所知,这本书一直沿用到最后。这本书现在过时了吗?我已经找过了,但仍然找不到我做错了什么。请帮忙 提前感谢!(blahblah;)与{blahblah;

我试图用克尼汉和里奇的书(C圣经)来学习C语言。在尝试使用tcc和MinGW(使用Windows)编译第一个问题时。它给了我一个错误信息。最详细的一个来自Min GW: helloworld.c:3:8:错误:在“(”标记)之前应为“)”

这是我的节目:

main()

(

    printf("hello, world\n");

)
据我所知,这本书一直沿用到最后。这本书现在过时了吗?我已经找过了,但仍然找不到我做错了什么。请帮忙

提前感谢!

(blahblah;)
{blahblah;}
不同,而且您的书可能有点过时(尽管代码应该可以学习,即使有些需要更改)。当前的标准C是

#include <stdio.h>
int main(void)
{
    printf("hello, world\n");
    return 0;
}
#包括
内部主(空)
{
printf(“你好,世界”\n);
返回0;
}

main(void)
也可以是
main(int-argc,char*argv[])
如果您想读取命令行参数。

您错误地使用了
而不是
{
}
。书中的代码大概有一个
#include
语句,以便声明
printf

您使用了括号而不是括号。它应该是

#include <stdio.h>

main() {
    printf("hello, world\n");
}
#包括
main(){
printf(“你好,世界”\n);
}

函数正文开头和结尾的符号是大括号,而不是圆括号。它应该看起来像:

main()
{
    printf("hello, world\n");
}

也就是说,这确实是非常过时的。

main(){printf(“hello,world\n”)}你怎么敢说K&R写了不可编译的代码!!你用的是什么版本?我不相信任何版本会错过所需的
#include
:我的(第2页,第6页)没有:)上面写着版权1978,它一定是第1版。程序在第6页。@user1031369:必须是第一个,是的。我不知道第1版和第2版之间有什么特别的区别:(我不敢打赌K&R中的示例包括
stdio.h
。K&R C有隐式原型,而且碰巧使用了
printf()
适用于隐式原型。好吧,在书中它们看起来非常相似,但现在我可以看到了。天哪,我觉得自己太愚蠢了。谢谢!@Pascal:即使使用隐式原型,
printf
也必须在作用域中有一个明确的原型,因为它是一个包含可变数量参数的函数。@pmg注意我说的是“这是
printf()的用法@Pascal:I stand correct…我认为ANSI C之前的版本也要求使用变量数量的函数原型(即使没有使用与
相关的变量).这是不是说这本书根本不值得使用?K&R具有历史意义,如果你想了解C的历史,它是一本有趣的读物,但它并不反映现代编码实践,甚至不反映语言的当前语法。使用这本书。这是值得的。让你的编译器尽可能多地发出警告,试着找出答案如果警告是由于语言的变化而问的,如果你被困了。好吧,老实说,我真的是在读它,目的是为了获得一些C++背景。我很欣赏快速反应。这是一个很棒的社区。C不是C++。它们是表兄弟,而不是孪生。没有提到任何包含的语句。但是在做了这些修改之后,程序现在就可以编译了。我认为有一本现代版的K&R书。