C语⾔从零开始之HelloWorld
0X00 前⾔
最近准备填之前挖的那个写完TCPL(The C Programming Language, C程序设计语⾔)中所有练习题的坑,就顺便趁这个机会开始写这个系列的⽂章。写这个⽂章的时候计划是⾯向初学者,所以在很多概念上会进⾏⼀些举例解释。⽂章的内容和代码主要整理⾃TCPL,再加上我个⼈的⼀些理解和修改,所以此系列的结构⼤致按照TCPL的内容顺序,书中每⼀个章节对应⼀篇或多篇⽂章。对于C语⾔学习者,可以配合TCPL⼀起使⽤。除了TCPL的内容外,计划在后⾯整理⼀些关于新标准C99和C11的相关信息。
学习⼀门语⾔的最好途径就是通过编写程序练习,所以在学习的过程中肯定要安装好相应的软件。⽆论是初学者还是拥有多年经验的程序员,IDE(Integrated Development Environment, 集成开发环境)都是⼀个最佳的选择,它能极⼤地提⾼⼯作和学习的效率。适合编写C语⾔的IDE包括Microsoft家的神器Visual Studio、JetBrains家的CLion、OSX独有的XCode以及开源的Eclipse、Code:Blocks等。IDE有很多,⽽且很多都是开源或者有免费的社区版,可以选择⼀个⾃⼰喜欢的。除去IDE以外,⽂本编辑器也是⼀种选择,如VIM、Emacs、Sublime、Notepad++等。IDE⼀般都集成了编译器,或者可以调⽤其它已经安装的编译器,可以直接点击编译运⾏按钮运⾏程序。编译器就是⼀个能将编写完成的代码翻译成机器语⾔然后⽣成可执⾏⽂件(如Windows中常⽤的.exe⽂件)的程序,⽽编译就是翻译代码的过程。当然对于Linux⽤户以及打算深⼊学习的朋友,建议学习掌握通过命令⾏的⽅式编译运⾏程序。
0X01 第⼀个程序
开始的第⼀个程序是⼀个最简单的程序,也就是最经典的Hello World程序,它的功能为打印出Hello World。程序的内容⾮常简单,也是C 语⾔编写程序的基本结构框架。下⾯就通过此程序开始介绍C语⾔。
#include <stdio.h>
main() {
printf("hello world\n");
}
c语言编译器ide代码编辑0X02 程序解释
上⾯的程序就是Hello World程序的主要内容,接下来将解释每⼀条语句的⽤途。#include <stdio.h>是⼀个预处理指令,作⽤为让编译器在此程序中包含指定的头⽂件,在这个程序中为编译器将在程序中包含stdio.h⽂件,它的作⽤是在程序中包括标准输⼊/输出库信息。换⼀种说法解释,就是在程序中可能需要⽤到⼀些函数(关于函数的概念会在下⾯提到),但是这个函数并不是由我们编写代码实现的,⽽是别
⼈写好给我们使⽤的。所以为了使⽤这些函数,就需要通过头⽂件包含进来。在这个例⼦中我们使⽤到了标准输⼊/输出库,标准输⼊/输出库是C标准库的⼀部分,它命名的规则为含义的缩写,即Standard Input and Output。对于C语⾔标准库,在这⾥可以暂时理解它是编译器实现者实现并提供给我们使⽤的⼀系列函数集合。关于头⽂件、标准库以及预处理指令的更多信息将在后续⽂章中再深⼊说明。
main()是⼀个名为main的函数,它是C语⾔中默认的⼊⼝函数,即在默认情况下运⾏程序时系统会先调⽤程序中的main函数。在不修改⼊⼝函数名称的情况下,⼀个完整的程序中main函数是必须的。main后⾯的()表⽰函数的参数列表,但在此例中没有⽤到参数,所以使⽤了空的参数列表()。函数使⽤⼀对{}将它的语句包括在其中,函数中的语句决定了函数的作⽤,它可能只有⼀⾏语句,也可能有成百上千⾏。在例⼦中,main函数只包含了⼀条语句printf("hello world\n");,将在下⼀段介绍它的作⽤。关于函数以及参数的具体内容将在⽂中后续部分继续介绍。
正如同上⼀段所说,main是⼀个函数,⽽printf也是⼀个函数。但是在这⾥不同于main,只是在使⽤printf,所以在写法上与实现main函数时有所区别。在实现main函数时使⽤了{}来包括它的语句,⽽调⽤printf⽽并⾮实现它,所以没有实现语句也就不需要使⽤{},⽽是使⽤了;代表这⼀⾏语句结束。在除了宏、使⽤了{}的语句等情况外,分号;都是必须的。printf函数的含义是格式化输出(Formatted Output),它来⾃于使⽤#include <stdio.h>包含进来的标准输⼊/输出库。在()中的就是要传递给printf函数的参数,在例⼦在中传递的是⼀个字符串"hello world\n"。在字符串中包含着⼀个\n,它是⼀个转义字符,称为换
⾏符,作⽤如同名称为换⾏。在不包含\n的情况下,printf不会进⾏换⾏,所以⼀般在使⽤过程中我们会⼿动添加\n进⾏换⾏。在程序运⾏过程中,当printf函数运⾏后,就将会在屏幕上打印出hello world。
在C语⾔中,除去必要的空格外,空⾏和空格往往不是必须的,它的作⽤是为了提⾼代码的可读性。很多⼈可能会觉得这是多敲空格和换⾏是件⿇烦的事,在初学阶段往往也忽视了这点。缺少空格的情况下可能会使阅读代码者混淆代码的含义,造成后续编写上的困难。⼀个产品被开发出来以后还需要进⾏维护与升级,⽽且开发⼀个产品往往不是只由⼀个⼈完成,所以有⼀个良好的编程习惯也是⾮常重要的。
0X03 程序的编译与运⾏(Linux为例)
在编写了程序后,就需要通过编译器对它进⾏编译,才能得到可执⾏⽂件。在IDE中往往只要点击编译运⾏按钮即可,所以在IDE中的过程便不再过多说明。在Linux中,编译C语⾔程序往往使⽤了gcc作为编译器,⽽且作为最常⽤的编译器之⼀,⼤多数的Linux发⾏版都直接带有gcc,不需要⼿动安装。以Hello World程序为例,将程序保存为hello.c后,可在shell中使⽤gcc进⾏编译,命令如下。
$ gcc hello.c -o hello
在通过编译后会得到⼀个名为hello的可执⾏⽂件,再使⽤./hello便可执⾏。从程序源码到可执⾏⽂件的过程其实相对复杂,⽽本⽂的主题为介绍C语⾔,所以不再过多解释说明。
0X04 Windows下编程
与Linux相同,Windows也同样可以使⽤C语⾔进⾏编程。如gcc有Windows实现版本mingw,安装后便可使⽤与上⽂相同的步骤进⾏编译与运⾏。但与Linux不同的⼀点是,Windows可执⾏⽂件通常以.exe作为后缀,可能需要使⽤./进⾏执⾏。除去使⽤上述⽅法外,在Windows下进⾏C语⾔编程最常⽤的⽅法便是使⽤Visual Studio了。现在Visual Studio已经有免费的Community版,只需要进⼊VS 官⽹下载安装即可。
0X04 结束语
在本篇中只是初步的介绍了C语⾔中最简单的⼀个程序,也是⼀个C语⾔程序⼤致的框架结构。在后续⽂章中,将会继续详细地介绍C语⾔。如有发现错误与不⾜之处欢迎留⾔或者发邮件与我联系。
0X05 参考资料
Brian W. Kernighan, Dennis M. Ritchie. The C Programming Language (2nd Edition).
⽂章⾸发⾃,转载请标明出处
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论