- C语言编程教程
- C语言 - 首页
- C语言基础
- C语言 - 概述
- C语言 - 特性
- C语言 - 历史
- C语言 - 环境设置
- C语言程序结构
- C语言 - Hello World
- C语言 - 编译过程
- C语言 - 注释
- C语言 - 词法单元
- C语言 - 关键字
- C语言 - 标识符
- C语言 - 用户输入
- C语言 - 基本语法
- C语言 - 数据类型
- C语言 - 变量
- C语言 - 整数提升
- C语言 - 类型转换
- C语言 - 类型强制转换
- C语言 - 布尔值
- C语言中的常量和字面量
- C语言 - 常量
- C语言 - 字面量
- C语言 - 转义序列
- C语言 - 格式说明符
- C语言中的运算符
- C语言 - 运算符
- C语言 - 算术运算符
- C语言 - 关系运算符
- C语言 - 逻辑运算符
- C语言 - 位运算符
- C语言 - 赋值运算符
- C语言 - 一元运算符
- C语言 - 自增和自减运算符
- C语言 - 三元运算符
- C语言 - sizeof 运算符
- C语言 - 运算符优先级
- C语言 - 其他运算符
- C语言中的决策机制
- C语言 - 决策机制
- C语言 - if 语句
- C语言 - if...else 语句
- C语言 - 嵌套 if 语句
- C语言 - switch 语句
- C语言 - 嵌套 switch 语句
- C语言中的循环
- C语言 - 循环
- C语言 - while 循环
- C语言 - for 循环
- C语言 - do...while 循环
- C语言 - 嵌套循环
- C语言 - 死循环
- C语言 - break 语句
- C语言 - continue 语句
- C语言 - goto 语句
- C语言中的函数
- C语言 - 函数
- C语言 - main 函数
- C语言 - 按值调用函数
- C语言 - 按引用调用函数
- C语言 - 嵌套函数
- C语言 - 可变参数函数
- C语言 - 用户自定义函数
- C语言 - 回调函数
- C语言 - return 语句
- C语言 - 递归
- C语言中的作用域规则
- C语言 - 作用域规则
- C语言 - 静态变量
- C语言 - 全局变量
- C语言中的数组
- C语言 - 数组
- C语言 - 数组的特性
- C语言 - 多维数组
- C语言 - 将数组传递给函数
- C语言 - 从函数返回数组
- C语言 - 变长数组
- C语言中的指针
- C语言 - 指针
- C语言 - 指针和数组
- C语言 - 指针的应用
- C语言 - 指针运算
- C语言 - 指针数组
- C语言 - 指向指针的指针
- C语言 - 将指针传递给函数
- C语言 - 从函数返回指针
- C语言 - 函数指针
- C语言 - 指向数组的指针
- C语言 - 指向结构体的指针
- C语言 - 指针链
- C语言 - 指针与数组的区别
- C语言 - 字符指针和函数
- C语言 - 空指针
- C语言 - void 指针
- C语言 - 悬空指针
- C语言 - 解引用指针
- C语言 - 近指针、远指针和巨大指针
- C语言 - 指针数组的初始化
- C语言 - 指针与多维数组的区别
- C语言中的字符串
- C语言 - 字符串
- C语言 - 字符串数组
- C语言 - 特殊字符
- C语言结构体和联合体
- C语言 - 结构体
- C语言 - 结构体和函数
- C语言 - 结构体数组
- C语言 - 自引用结构体
- C语言 - 查找表
- C语言 - 点(.)运算符
- C语言 - 枚举(enum)
- C语言 - 结构体填充和打包
- C语言 - 嵌套结构体
- C语言 - 匿名结构体和联合体
- C语言 - 联合体
- C语言 - 位域
- C语言 - typedef
- C语言中的文件处理
- C语言 - 输入输出
- C语言 - 文件I/O (文件处理)
- C语言预处理器
- C语言 - 预处理器
- C语言 - 指令
- C语言 - 预处理器运算符
- C语言 - 宏
- C语言 - 头文件
- C语言中的内存管理
- C语言 - 内存管理
- C语言 - 内存地址
- C语言 - 存储类别
- 其他主题
- C语言 - 错误处理
- C语言 - 可变参数
- C语言 - 命令执行
- C语言 - 数学函数
- C语言 - static 关键字
- C语言 - 随机数生成
- C语言 - 命令行参数
- C语言编程资源
- C语言 - 问答
- C语言 - 快速指南
- C语言 - 速查表
- C语言 - 有用资源
- C语言 - 讨论
C语言程序结构
一个典型的C语言程序包含一些必须的部分和一些可选的部分,这取决于程序的逻辑、复杂性和可读性。通常,C程序以一个或多个预处理器指令(#include语句)开始,并且必须包含一个main()函数作为程序的入口点。此外,还可能有变量和函数、宏和其他用户定义函数等的全局声明。
预处理器部分
C编译器附带几个库文件,扩展名为“.h”。“.h”文件(称为“头文件”)包含一个或多个预定义函数(也称为“库函数”),可在C程序中使用。
库函数必须加载到任何C程序中。“#include”语句用于包含头文件。它是一个“预处理器指令”。
例如,printf()和scanf()函数用于执行控制台I/O操作。它们在stdio.h文件中定义。因此,您总是会在任何C程序的顶部找到#include <stdio.h>语句。其他重要且常用的头文件包括string.h、math.h、stdlib.h等。
还有其他预处理器指令,例如#define,用于定义常量和宏,以及#ifdef用于条件定义。
以下语句定义了一个常量PI:
#define PI 3.14159
示例
定义常量后,可以在C程序的其余部分使用它。
#include <stdio.h> #define PI 3.14159 int main(){ int radius = 5; float area = PI*radius*radius; printf("Area: %f", area); return 0; }
输出
执行此代码后,您将获得以下输出:
Area: 78.539749
您还可以使用"#define"指令定义宏。它类似于C语言中的函数。我们可以向宏名传递一个或多个参数,并在代码段中执行操作。
以下代码使用#define语句定义AREA宏:
示例
#include <stdio.h> #define PI 3.14159 #define AREA(r) (PI*r*r) int main(){ int radius = 5; float area = AREA(radius); printf("Area: %f", area); return 0; }
输出
Area: 78.539749
宏的执行速度通常比函数快。
main()函数
C程序是由一个或多个函数组成的集合。C程序中有两种类型的函数:库函数和用户定义函数。
C程序中必须至少有一个用户定义的函数,其名称必须为main()。main()函数作为程序的入口点。运行程序时,编译器会查找main()函数。
main()函数包含一个或多个语句。默认情况下,每个语句必须以分号结尾。语句可能包括变量声明、决策控制或循环结构,或对库函数或其他用户定义函数的调用。
在C语言中,函数必须有数据类型。返回值的数据类型必须与函数的数据类型匹配。默认情况下,C语言中的函数是int类型。因此,如果函数没有return语句,则其类型为int,您可以在函数定义中省略它,但编译器会发出警告:
warning: return type defaults to 'int'
示例
main()函数的一个典型示例如下:
#include <stdio.h> int main() { /* my first program in C */ printf("Hello, World! \n"); return 0; }
输出
执行此代码后,您将获得以下输出:
Hello, World!
全局声明部分
此部分包含要在程序中所有函数中使用的变量的声明。程序后面定义的用户定义函数以及用户定义的数据类型的向前声明也位于全局部分。
全局变量声明示例:
int total = 0; float average = 0.0;
函数的前向声明示例:
float area(float height, float width);
C程序中的子程序
C程序中可能有多个用户定义的函数。编程最佳实践要求以结构化的方式将编程逻辑分解成独立且可重用的函数。
根据需求,C程序可能有一个或多个用户定义的函数,这些函数可以从main()函数或任何其他用户定义的函数中调用。
C程序中的注释
除了C程序的编程元素,如变量、结构体、循环、函数等之外,代码中可能还有一些在“/* .. */”中的文本,这些文本被识别为注释。编译器会忽略这些注释。
在代码中插入注释通常有助于记录程序,以及理解和调试编程逻辑和错误。
如果/*符号没有匹配的*/符号,编译器会报告错误:“未终止的注释”。
/*和*/之间的文本称为C风格注释,用于插入多行注释。
/* Program to display Hello World Author: Tutorialspoint Built with codeBlocks */
单行注释以双斜杠(//)开头,以换行符结尾。它也可以出现在有效的C语句之后。
int age = 20; // variable to store age
但是,不能在以“//”开头的行中给出有效的语句。因此,以下语句是错误的:
// Variable to store age. int age=20;
C程序的结构
以下代码显示了C程序中的不同部分:
/*Headers*/ #include <stdio.h> #include <math.h> /*forward declaration*/ float area_of_square(float); /*main function*/ int main() { /* my first program in C */ float side = 5.50; float area = area_of_square(side); printf ("Side=%5.2f Area=%5.2f", side, area); return 0; } /*subroutine*/ float area_of_square(float side){ float area = pow(side,2); return area; }
输出
执行此代码后,您将获得以下输出:
Side= 5.50 Area=30.25