一、.c程序编译执行的基本流程
- 预处理:预处理器(preprocessor)执行 “#” 开头的命令(即指令)
- 编译:进入编译器(compiler)翻译成机器指令
- 链接:由链接器(Linker)将编译好的机器指令与其他附加(如各种库函数)代码整合。
二、.c程序的一般形式
指令 //以 “#” 号开头,无 “;” 结尾
int main(void)
{
语句
}
1、指令
举例:
# include <stdio.h>
此指令:
- 将标准输入/输出库 包含进程序中;
- .h为头文件(header)。
其他说明:
- 指令以 “#” 开头;
- 默认只占一行;
- 结尾无分号。
2、函数
- 函数通过
return
命令来指定返回值; - 对c程序而言,
main
函数为必需且唯一;
举例:
#include <stdio.h>
int main(void) //int表示返回整数值,void表明函数中无参数
{
printf("Hello,world!\n");
return 0; //函数终止,且返回0。
//对main函数,没有这条语句,程序亦可正常终止,但会有警告,因为未返回
}
3、语句
- 分号 “;” 结尾;
- 可占连续多行。对c程序而言,在遵守必要语法规则下,记号之间的空格不影响程序正常执行。
4、注释
注释的2种格式:
/* 注释格式1 */
// 注释格式2
说明1:
格式1 (/* 注释 */ ) | 格式2 (//注释 ) | |
---|---|---|
优点 | 可跨行,实现连续多行注释 | 更简单,不易出错,直观易读 |
缺点 | 容易忘写后半边 " */ "导致程序出错 | 只能单行注释,若要多行,则每行均要写注释符 |
总结 | 适合长注释 | 适合短注释 |
说明2: |
- 格式1与格式1不能嵌套,即
/*
/*非法嵌套*/
*/
- 格式2可嵌套进格式1中,即
/*
//合法嵌套
*/
三、变量和赋值
1、变量类型(type)
- int 整型
- float 浮点型
- char 字符型
2、变量声明
对于变量,先声明,再使用。
int a, b, c;
float x, y, z;
3、赋值
先声明,再赋值
// 正确用法
int a;
a = 7;
// 错误用法
a = 7;
int a;
float型赋值
float x;
x = 12.56f; //float型赋值时不加f会warning,对于double float型可以不加
4、显示变量的值
使用输出函数
printf("a = %d\n", a);
printf("x = %.2f\n", x);
5、变量初始化
直接在声明时初始化。
int a = 7, b = 8 , c = 9; //初始化的数值视为初始化器(initializer)
float x = 12.56f, y = 10.4;
6、显示表达式的值
printf("Volume = %d\n", length * width * height);
四、读入输入
使用scanf函数。
格式:
scanf("%d", &a); //读取整型数值,存入a中
scanf("%f", &x); //读取浮点型数值,存入x中
五、常量定义
使用宏定义
的方式
# define INCHES_PER_POUND 12 //定义数值为12的常量INCHES_PER_POUND
# define RECPROCAL_OF_PI (1.0f/3.14159f) //定义表达式
注意:
- 宏定义格式不能出错;
- #开头;
- define为小写;
- 变量名习惯全大写;
- 没有赋值符号或等于号
- 当宏包含运算符时,用括号括起来
- 常量定义后无需声明,只需要声明变量
六、标识符(identifier)
1、定义:对变量、函数、宏和其他实体进行命名的名称
2、说明:标识符可以含有 字母 、下划线 和 数字,但不得以数字开头
举例:
有效标识符:times10, inches_per_pound, _done
非法标识符:10times, inches-per-pound…
尤其注意:C语言区分大小写
七、Q&A
- 什么是GCC?
- 原指 GUN C Compiler ,即C语言编译器,仅编译C语言
- 现指 GUN C Collection,GUN编译器套件,编译多种语言
- 某些C语言教材中,
main
函数结尾使用exit(0)
而非return(0)
,二者有何区别?
在
main
函数中,return(0);
和exit(0);
完全等价,二者均终止程序执行,且返回0。
main
函数结尾的return(0)
是否可省略?
在
main
函数中,return
语句非必需,程序仍会终止,当指定int main()
时,会默认返回0,否则会随机返回一个值。