C程序组成:- 一个C语言源程序是由多个.c和.h组成的
- .c : C语言源代码文件
- .h : 头文件
复制代码.C文件的组成
(1) 头文件包含部分
#include : 包含命令
作用是把后面的那个文件的内容在此处展开。 - #include <stdio.h>
- #include "filename.h"
复制代码<> 与 “” 有什么区别? 搜素路径不同
#include 后面只是指定了文件名,并没有指定文件的保存路径,
那么咱们的编译器到哪里去找到这个.h文件呢?
<> : 到标准的搜索路径下面去找
如:
/usr/include/
“” : 先到工程指定的路径下面去找,如果没有找到,
那么再标准搜索路径下面去找。
如果编译工程代码时候,并没有指定搜索,那么它将默认是当前路径。
(2) 宏定义
宏定义: 定义一个宏
宏: 是一个替换别人的东西的东西。
宏有两种:
a、不带参数的宏
#define 宏名 要替代的内容 - 如:
- #define PI 3.1415
- #define LED_ON 0
- .....
- #define M 3
- #define N 4
复制代码b、带有参数的宏
#define 宏名(参数列表) 要替代的内容
“参数列表” : 在宏定义的参数,不需要类型
如:
写一个宏,用来表示两个整数之间较大的那一个! - #define MAX(a, b) (a) > (b) ? (a) : (b)
-
- int main(int argc, char ** argv)
- {
- int m = MAX(3, 4);
- }
复制代码c、宏的作用
(a) 替换
仅仅替换,不会额外增加()等
不作词义分析
(b) 宏有一个宏名,“字面意思”
(3) 声明部分
声明: C语言的声明是指把一个符号(标识符)与一个对象或类型关联起来。
告诉编译器,这个符号它是一个什么东西。
外部变量的声明:
语法:
extern 外部变量的类型 外部变量名;
外部函数的声明:
语法:
extern 外部函数的返回值类型 函数名(参数类型列表); - 1.c 2.c
- 需要用到1.c中定义函数sum
- extern int sum(int , int ) ;
- int sum(int a, int b)
- {
- return a+b;
- }
复制代码类型的声明或定义:
自定义类型的作用域 最大就是本文件中生效。 - 1.c 2.c
- 需要用到1.c中的 struct test
- 如果需要用到一模一样的,那么
- 咱们需要在2.c中定义一个同样的
- struct test
- {
- int a;
- char c;
- };
复制代码(4) 全局变量以及函数的声明 (5) 函数的具体实现 - int main()
- {
- .....
- }
- int sum(int a. int b)
- {
- return a+b;
- }
复制代码总结:
C语言源代码文件是由函数组成的,C语言的指针必须写在函数内部,
一个.c文件,可以由多个函数组成,一个工程可以由多个.c组成,
但是一个.c 或者 一个工程 有且仅有一个main函数,这个main函数
就是程序的入口,main函数结束,程序就执行完毕
.h文件的组成
.h 接口文件一般会包含一些声明:
函数声明
类型声明或定义
宏定义
…
头文件中一般不包含代码的实现,因为它只是一个接口文件。
注意:
头文件不能够重复包含。
为了防止头文件被重复包含引发重复定义的问题。
头文件的编写规范如下: - xxx.h
- #ifndef __XXX_H__
- #define __XXX_H__
-
- //...头文件的具体的内容
-
- #endif
复制代码如: - #ifndef __HEAD_H__//格式__XXXXX_X__
- #define __HEAD_H__
- #define Num(a) sizeof(a)/sizeof(a[0])//求数组a的元素个数
- #define Get_Bit(x,n) (x>>n)& 1//求整数x中第几位nbit
- #define MAX(a,b) (a)>(b)?(a):(b)//比较两数大小
- int Sum_number(int a, int b);//求两数之和
- #endif
复制代码头文件的引用的原则:谁用谁包含 |