1.简单的C语言程序结构
要建造房屋,首先需要打地基、搬砖搭建框架(这大概就是为什么叫搬砖的原因)。学习计算机语言的时候也一样,应该从基本的结构开始学起。下面,我们看一段简单的源代码,这段代码希望大家动手对着敲一遍,自己动手完完全全敲一次。我想对于刚学编程的人,即使对着敲,也是极其容易出现错误的。当看到编译器很多的错误时候,也别慌。其中最大的两个原因,一个是使用了中文字符,比如中文的分号以及括号,二是拼写单词错误。我们在编程的时候,需要全部使用英文符号。比如,程序中的分号以及括号。
//myfirst.c -- 显示消息
#include <stdio.h>
int main()
{
printf("Hello\n");
printf("程序员基础知识!");
return 0;
}
运行编译程序(快捷键“ctrl+F5”)后得到的输出:
Hello
程序员基础知识!
下面我们将这段代码分析一下,可以从以下几个部分来看:
- 1)注释,代码的注释,是对代码的说明。编译器会忽略注释,毕竟机器也不想看你的注释QAQ。
- 2)预处理器编译指令#include,以及包含的头文件。
- 3)函数头:int main()。C语言程序由函数构成,一个程序可以有多个函数,但是有且只有一个主函数,也就是main()函数。
- 4)函数体,花括号“{}”括起来的部分,包括各种指令组成的语句在内。
- 5)结束main()函数的return语句。
2.注释
C语言有两种注释方式:
- 1)“//”
这个其实是C++风格注释,通常用于注释单行文本或代码,它们放在一起组成多行注释。
以 // 开始,到行尾结束。单行注释,这种注释可以单独占一行,也可以和代码位于同一行。 - 2)“/* */”
这个是C风格注释,通常用于注释大块文本或小片代码,也能用它们注释单行。
以 /* 开始,到 */ 结束。因此可以跨越多行。
C 风格注释可出现在 C++ 风格注释内:
// printf("Hello World!"); /* 输出Hello World! */
C++ 风格注释可出现在 C 风格注释内:
/*
printf("Hello\n"); //输出Hello,并且换行
printf("程序员基础知识!"); //输出程序员基础知识!
*/
两者可以同时存在,并不冲突:
printf("Hello World!");
/* 与 C 风格注释不冲突 */
// 与 C++ 风格注释不冲突
注释主要是为了更好的读懂代码,使人能明确的看出代码的功能。写注释是一个编程的好习惯,而且在以后的团队开发或者代码维护有相当重要的作用。看别人没用注释甚至不规范的代码,肯定让你头疼。在实际工作中经常遇到自己代码写完,过一段时间测试出了bug或者改了需求之类,你还要再看自己代码,有注释就不会忘记了。
3.预处理器和头文件
- 1)预处理器
预处理器在程序编译之前对源文件进行处理,采用以“#”为行首作为指示,include是预处理指令的一种。
预处理指令包括:include 、define 、undef 、if 、 ifdef 、 ifndef 、 else 、 elif 、 endif 、 line 、 error 、 pragma等。我们现在先了解#include,又叫文件包含预处理指令,每个指令占据一行。 - 2)头文件
头文件,包含在文件最开始的地方。头文件使用.h为扩展名,头文件提供通用文件操作支持以及提供输入/输出的函数。在这段代码中,主要是提供printf()函数。如果没有这个头文件,我们使用printf()函数将会报错。
4.main()函数
通常,C语言程序中必须包含一个名为main()的函数。main()函数由系统调用执行,main()函数是程序执行的入口函数。运行C语言代码时,从main()函数开始。main()函数由两部分组成,函数头int main()部分和函数体用花括号“{}”括起来的部分。main()函数的定义以函数头int main()开始,函数体的作用是指出计算机做什么指令操作。每条完整的指令称为语句,语句以分号“;”结束,所以在C语言程序中不能省略分号。main()中的最后是返回语句return 0,用来结束该函数,0代表程序正常退出。
int main()的其它写法,可以省略int就写成main()。这是因为在C语言中,省略返回类型则默认为int(C++中逐步淘汰了这种用法)。所以我们就别偷懒了,还是别用这种写法了。还有写成int main(void)和void main()的,我都不推荐,大家还是用int main()最好了。下面是我手画(字丑请自行忽略)的main()结构图:
5.printf()函数输出字符串
printf()函数的作用是格式化输出。我们来看这段代码:printf("Hello\n"); 双引号括起来的部分是要打印的消息。里面的一系列字符(Hello)叫做字符串。“\n”是指示换行的,被看成一个字符,所以叫做换行符,作用是取新的一行开始。下面的printf("程序员基础知识!"); 语句,就会另取一行打印输出了。
6.空白
空格、制表符、回车都可以称为空白。空白可以分隔语句的各个部分,让编译器能识别语句中的某些元素在哪里开始和结束。比如语句:int main(),如果你将其写成intmain(),那么程序将报错。有些字符之间不需要用空白分开,比如括号和逗号。
只包含空格的行,编译器会忽略它。为了增强代码可读性,可以根据需要适当增加一些空格。
7.总结
总结一下,本节内容主要介绍了C语言程序的一般格式,具体包括注释、预处理器和头文件、main()函数、printf()函数输出字符串。
8.练习
2-1 假设main()函数包含代码:printf("程序员基础知识!"); 编译器报错“printf”: 找不到标识符,是什么原因?
2-2 return 0;表示成功结束,那么return -1;表示什么?
2-3 编写一个C语言程序,第一行显示“hero:盖伦”,第二行显示“attack:300”,并对代码做一些简单的注释,比如在旁边注释,英雄:盖伦。