C语言程序结构



一个典型的C语言程序包含一些必须的部分和一些可选的部分,这取决于程序的逻辑、复杂性和可读性。通常,C程序以一个或多个预处理器指令(#include语句)开始,并且必须包含一个main()函数作为程序的入口点。此外,还可能有变量函数、宏和其他用户定义函数等的全局声明。

预处理器部分

C编译器附带几个库文件,扩展名为“.h”。“.h”文件(称为“头文件”)包含一个或多个预定义函数(也称为“库函数”),可在C程序中使用。

库函数必须加载到任何C程序中。“#include”语句用于包含头文件。它是一个“预处理器指令”

例如,printf()scanf()函数用于执行控制台I/O操作。它们在stdio.h文件中定义。因此,您总是会在任何C程序的顶部找到#include <stdio.h>语句。其他重要且常用的头文件包括string.hmath.hstdlib.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
广告