C语言的组成:
一个C源程序是由多个.c文件和.h文件组成。

源程序:是指未编译的按照一定的程序设计语言规范书写的文本文件。.c文件:C源代码文件(源代码指的是一系列人类可读的计算机语言指令)。.h文件:头文件?
  1. .c文件的组成
    (1) 预处理指令
    以“#”开头的就是预处理指令
    预处理指令在程序编译之前就会事先做的处理。

    a.  文件包含命令#include 包含命令作用:就是把#include后面的那个文件中的内容在此处展开(复制粘贴)。#include <stdio.h>#include "02.h"上面两者都是文件包含命令,都是在特定的文件夹下(路径下)搜索相应的头文件,然后把该文件的内容在使用包含命令处展开,但不同的是,其搜索路径不一样。<>表示在系统标准的头文件路径(如:/usr/include...)下搜索,可以理解为官方路径。""表示先在工程的当前路径下搜索,如果没有找到的话,再去官方路径下搜索。b.  宏定义宏定义:定义一个宏宏:是一种批量处理的称谓。他就是一个用来替换别人的东西。宏定义的形式如下:#define 宏名 替换文本后续所有出现宏名的地方都将被替换为替换文本。宏有两种:1.   不带参数的宏例子:#define PI 3.14double area = PI * r * r;===> area = 3.14 * r * r;2. 带参数的宏语法:#define 宏名(参数) 替换文本例子:#define max(a,b) a > b ? a : bmax(a,b)作用是求出a和b之间的最大值max(2,3) --> 2 > 3 ? 2 : 3 --> 3int a = max(3,2) + 5;a = ?
    

    typedef是一个关键字,作用是为一种数据类型定义一个新的名字
    可以是基本类型,也可以是自定义类型。

    语法:
    typedef 现有的类型名(旧类型名) 新的类型名;
    —>新的类型名就和现有的类型名意义是一样的了

    使用typedef目的一般有两个:
    1. 给旧类型一个易记且意义明确的名字
    例子:
    typedef unsigned char uint8;
    typedef unsigned int uint32;
    2. 简化一些比较复杂的类型声明
    例子:

typedef struct student STU;struct student s;<===> STU s;struct student
{int num;char name[32];
}stu1,stu2,stu3;struct student stu;struct
{int num;char name[32];
}stu1,stu2,stu3;struct stu;//errortypedef struct student
{int num;char name[32];
}STU;
     int NUM[100];//定义了一个数组,数组名为NUM想定义一个和NUM一样类型的变量a:typeof(NUM) a;int[100] a; ---> int a[100];typedef int[100] NUM_T;--->typedef int NUM_T[100];//NUM_T是一个新的类型名,相当于int[100]NUM_T a; <===> int a[100];void (*p)(int,int)//定义了一个函数指针,指针名为ptypeof(p) p1;void (int,int)* p1; ---> void (*p1)(int,int)typedef void (int,int)* func_t -->  typedef void (*func_t)(int,int)//func_t是一个新的类型

总结:

int a;//a就是一个变量
typedef int a;//a就是一个类型,这个类型就是int,a就是int的别名int b[100];//b就是一个数组
typedef int b[100];//b就是一个新的类型名,等用于int[100]int (*p)(void);//p就是一个函数指针变量名
typedef int (*p)(void);//p就是一个新的类型名,等同于int (void) *
p p1;

typedef 与 define的比较:

                     typedef                     define 语法不同         末尾需要;                   末尾不需要;一条语句                  是一条预编译指令处理阶段不同  typedef在编译时处理           在预处理阶段处理作用不同        给现有的类型起别名           替换作用作用域不同       typedef只能在定义的作用域    任何地方都可以使用内使用对指针的操作  typedef int* pint;          #define pint int*不同         pint a,b;                   pint a,b;a和b都是int*              a是int*,b是一个int

c. 条件编译
条件编译一般我们放在.h文件中。

#ifndef xxxx//如果没有定义xxxx,那么就定义xxxx,那么在#endif之前的语句才会参与编译
#define xxxx//防止重复定义

#endif

(2) 声明
外部对象的声明

(3) 全局变量和函数的定义

2 . <xxx.h>文件的组成

.h文件接口描述文件
包含一些声明:
函数的声明、外部变量的声明、类型的声明…
头文件中一般不包含具体代码的实现,只是一个接口文件而已。

C语言学习笔记(9)之C语言的组成相关推荐

  1. C语言学习笔记-P1 初识C语言(2)

    C语言学习笔记-P1 初识C语言(2) C语言学习笔记-P1 初识C语言(2) 一.常量 1.字面常量 2.const修饰的常变量 3.#define定义的标识符常量 3.枚举常量 二.字符串+转义字 ...

  2. C语言学习笔记-P1 初识C语言(1)

    C语言学习笔记-P1 初识C语言(1) P1 初识C语言(1) 一.什么是C语言 1.定义 2.发展 二.第一个C语言程序 Hello World 三.数据类型 四.变量,常量 未完待续!!! P1 ...

  3. C语言学习笔记01:C语言基础语法_变量类型_类型转换

    文章目录 C语言第一天课程笔记 1. 内容安排 2. 课堂笔记 2.1 计算机硬件 2.2 计算机软件 2.3 编程语言和编译器 2.4 编程语言发展 2.5 C语言标准 2.6 C语言学习理由 2. ...

  4. C语言学习笔记一(C语言相关知识)

    C语言学习第一节 文章目录 C语言学习第一节 一.C语言发展史 二.C语言的特点 三.C语言标准 一.C语言发展史 C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair ...

  5. C 语言学习笔记(三):C 语言开发环境搭建

    文章目录 一.Windows 二.Linux 2.1 VMware Workstation Pro软件简介及安装 2.2 安装 Ubuntu 系统 2.2.1 Ubuntu 下载 2.2.2 安装 U ...

  6. c语言双重for循环流程图_【C语言学习笔记系列】C语言编程狼追兔子问题代码解析!...

    问题描述 一只兔子躲进了10个环形分布的洞中的一个.狼在第一个洞中没有找到兔子,就隔一个洞,到第3个洞去找:也没有找到,就隔2个洞,到第6个洞去找:以后每次多一个洞去找兔子--这样下去,如果一直找不到 ...

  7. R语言学习笔记 07 Probit、Logistic回归

    R语言学习笔记 文章目录 R语言学习笔记 probit回归 factor()和as.factor() relevel() 案例11.4复刻 glm函数 整理变量 回归:Logistic和Probit- ...

  8. Lawliet|C语言学习笔记2——变量/数据类型/表达式

    C语言学习笔记2--认识C语言1 1.变量 a.变量的命名 <类型名称><变量名称> 存放数据的一个地方,用于参与后续的运算. 变量命名的规则:只能由字母.数字和下划线组成,且 ...

  9. C语言如何加缓冲,C语言学习笔记之输出缓冲

    在c语言中经常用到输出函数printf,当我们像往常一样在输出函数中输入我们的想要的输出的东西后加\n换行 验证结果如我们输出的一样 如果我们在后面加入死循环会不会出现这些语句呢 结果卡死了,可还是输 ...

  10. R语言学习笔记 06 岭回归、lasso回归

    R语言学习笔记 文章目录 R语言学习笔记 比较lm.ridge和glmnet函数 画岭迹图 图6-4 <统计学习导论 基于R语言的应用>P182 图6-6<统计学习导论 基于R语言的 ...

最新文章

  1. 【权值分块】bzoj1503 [NOI2004]郁闷的出纳员
  2. linux id 命令 显示用户id和组id信息
  3. springboot: Spring Data JpaRepository
  4. AlphaGo已经拿下围棋,创投界的“Master”何时出现?
  5. 柳编产业临沭谋定转型升级 农民丰收节交易会技能兴鲁
  6. python查看函数定义_从函数内函数定义看python的函数实现
  7. NOJ --138 找球号(二)
  8. BZOJ-1968 COMMON 约数研究 数论+奇怪的姿势
  9. Socket api接口--Send(),Recv()的长度问题
  10. ui界面表单设计素材模板,实用可临摹
  11. 快速上手,教你开发第一个基于 AutoML 的量化投资决策应用
  12. NumPy库---数组进阶操作
  13. matlab 匹配滤波器,应用于雷达系统匹配滤波器的matlab仿真详解.doc
  14. 统一通信系统解决方案
  15. 爬虫初学——爬取京东商品的评论(二)
  16. 家喻户晓的足力健,凭什么征服中老年人?
  17. BZOJ 4698 Sdoi2008 Sandy的卡片
  18. 知乎android客户端drawer布局探究
  19. WZOI-359字符串哈希
  20. 【TypeScript】必学基础

热门文章

  1. Unity Text字间距和行间距调整
  2. python 高斯过程_高斯过程
  3. Docker使用GPU
  4. 中国IT界七大奇迹人物
  5. gitlib项目迁移到新Gitlab Server
  6. 计算机基础——计算思维
  7. Clean Code总结
  8. 阿里云盘开启公测,这些“暗号”助你云盘容量扩容2.5T(内含10+兑换码)
  9. 展会APP开发的优势前景
  10. 物联网技术的智能井盖系统功能