目录
程序结构
头文件包含(#include)
- 功能与用途:头文件包含指令是 C 语言中用于模块化和代码复用的重要机制。它允许我们将常用的函数声明、宏定义和类型定义等集中存放在一个文件中,然后在需要使用这些内容的源文件里通过 #include 指令将其引入。
- 标准库头文件:标准库头文件由 C 语言标准规定,包含了众多实用的函数和类型声明。例如:
- stdio.h:提供了标准输入输出函数,像 printf、scanf、fopen 等。
- stdlib.h:包含了动态内存分配函数(如 malloc、free)、随机数生成函数(如 rand)和程序终止函数(如 exit)等。
- string.h:定义了一系列用于字符串处理的函数,例如 strcpy、strlen、strcmp 等。
- 自定义头文件:当我们在项目中编写了一些通用的函数或数据结构时,可以将其声明放在自定义头文件中。自定义头文件通常使用 .h 作为扩展名,使用双引号 “” 包含。例如,创建一个名为 myheader.h 的头文件:
// myheader.h
#ifndef MYHEADER_H
#define MYHEADER_H
int add(int a, int b);
#endif
在源文件中使用该头文件:
// main.c
#include "myheader.h"
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int result = add(3, 5);
printf("Result: %d\n", result);
return 0;
}
- 头文件保护:为了防止头文件被重复包含,通常会使用预处理器指令 #ifndef、#define 和 #endif 来创建头文件保护。如上述 myheader.h 中的示例,通过定义一个唯一的宏 MYHEADER_H,可以避免头文件被多次包含导致的重复定义错误。
main() 函数
函数定义与返回值:main() 函数是 C 程序的入口点,程序从这里开始执行。它有两种常见的定义形式:
int main()
:这种形式表示 main 函数不接受任何参数,返回一个整数值。返回值通常用于表示程序的退出状态,0 表示程序正常退出,非零值表示程序异常退出。int main(int argc, char *argv[])
:argc 表示命令行参数的数量,argv 是一个指向字符串数组的指针,存储了每个命令行参数。例如:
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc > 1) {
printf("You provided %d arguments:\n", argc - 1);
for (int i = 1; i < argc; i++) {
printf("%s\n", argv[i]);
}
} else {
printf("No arguments provided.\n");
}
return 0;
}
程序执行流程:当程序启动时,操作系统会调用 main 函数,main 函数中的代码按顺序执行。当 main 函数执行完毕并返回一个值后,程序结束,返回值会传递给操作系统。
注释(// 和 /* */)
单行注释(//):用于对代码的某一行或某一部分进行简短的说明。单行注释从 // 开始,到该行结束为止。例如:
// 这是一个简单的加法函数
int add(int a, int b) {
return a + b; // 返回两数之和
}
多行注释(/* /):适用于对一段代码进行详细的说明,或者暂时禁用一段代码。多行注释以 / 开始,以 */ 结束,可以跨越多行。例如:
/*
* 这是一个更复杂的函数
* 它接受两个整数作为参数
* 并返回它们的乘积
*/
int multiply(int a, int b) {
return a * b;
}
变量与常量
定义与初始化
变量定义:在 C 语言中,变量必须先定义后使用。变量定义的一般形式为:数据类型 变量名;。例如:
int num; // 定义一个整型变量 num
char ch; // 定义一个字符型变量 ch
float f; // 定义一个单精度浮点型变量 f
double d; // 定义一个双精度浮点型变量 d
变量初始化:变量初始化是在定义变量的同时为其赋初值。可以使用直接赋值、表达式赋值等方式进行初始化。例如:
int age = 25; // 直接赋值初始化
float radius = 3.14f * 2; // 表达式赋值初始化
未初始化变量:如果定义变量时没有进行初始化,那么变量的值是未定义的,可能包含任意的垃圾值。在使用未初始化的变量之前,最好先给它赋值,否则可能会导致不可预期的结果。
作用域(全局变量、局部变量)
全局变量:全局变量定义在函数外部,具有全局作用域,即可以在程序的任何函数中访问。全局变量在程序启动时被创建,在程序结束时被销毁。例如:
#include <stdio.h>
// 全局变量
int global_var = 10;
void func() {
printf("Global variable in func: %d\n"