码了这么久的代码,我居然不知道C程序有这些结构?
一、C程序结构
1.预处理命令
你是不是经常在编写程序中看到以下等字样?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define
#error
#if
#else
#elif
#endif
#ifdef
#ifndef
#undef
#line
#pragma
我想,大部分小白只知道前面5种预处理命令。
可能很多小白太过纠结于算法,而忽略了这些C语言的核心知识。
学知识,要善于总结。而不是学一点丢一点,成了杂学,没有系统的知识树。
下面就讲一讲预处理命令。
①文件包含命令
//语法:#include<文件名>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
include是关键字,可以包含一个文件名,每个C语言程序都包含头文件,不同头文件提供不同的函数,若没有stdio.h这个头文件,C语言程序就无法输入(scanf)输出(printf);stdlib、string.h两个头文件也包含了其他的函数,要调用相应的函数,就要调用相应的头文件。
②宏定义命令
//语法:#define 标识符 字符串
#define PI 3.1415926
#define Hello "Hello World"
//又可以定义函数表达式
#define f(x) x*x //表示f(x)=x^2
#define f(x,y) x*y //表示f(x,y)=x*y
宏定义的变量的作用域和生存期是整个程序,对整个程序都起作用。
③条件编译命令
关键字如下
#ifdef
#if
#else
#endif
#ifndef
许多C语言入门教材上缺乏对条件编译命令的详解,这里先混个脸熟,后续会有条件编译命令的专题。
2.语句
①语法
C语言语句虽然比汇编语言更加*,但是也要遵从一定的语法,所有完整语句结束是都带有分号,在这里for开始到printf结束才是一个完整的语句,不是一行一个语句。
#include<stdio.h>
int main(){
for(int i=0;i<10;i++)
printf("%d",1);
}
②语句的分类
全局声明定义语句:
#include<stdio.h>
int a=1;
int main(){
printf("%d",1);
}
位于main函数前的变量声明属于全局变量声明,int a=1属于全局声明定义语句,声明一个整形变量a并把1赋值给a,它的作用域是整个程序。
局部声明定义语句
#include<stdio.h>
int main(){
int a=1;
}
#include<stdio.h>
int main(){
int i;
for(i=0;i<10;i++){
int a=0;
printf("%d",a);
}
}
所有的局部声明定义语句都在{}代码块内,作用域为以{}为界限的整个代码块。
第一个程序的变量a作用于main函数,属于局部变量。
第二个恒星的变量a作用于for循环,属于局部变量。
执行语句
3.函数
函数由函数头和函数体构成。
很多小白一脸懵逼:
什么是函数头?什么函数体呢?
先讲讲函数体吧。
以main函数为例,main函数后面花括号扩起来的所有语句,这些语句可以定义了main函数的用途和执行过程,就是函数体。简单地说,函数体是函数的主要组成部分,是核心。
我们要自定义一个函数,就要写大量的函数体,表明这个函数的用途和作用。
啥是函数头呢?函数头是函数体前的所有部分。
这里有一个函数。
void func(int a,int b){
int c;
c=a+b;
printf("%d",c);
}
花括号内的所有内容是函数体,
而函数头就是void func(int a,int b),它定义了函数的返回类型void和函数的参数(int a,int b)。
4.注释
注释符有两种
①行注释符://
②块注释符:/* … … */
它们不属于程序的执行部分,程序在执行时会跳过注释,注释只起到解释说明程序的作用,增加程序的可读性。