C语言学习笔记——补充知识
一、关键字
由ANSI标准定义的C语言关键字共32个: auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if while static
就讲其中关键字来作为知识补充 const 关键字: 修饰一个变量,让变量把它变成常量 如: const int a=10;//把变量a 变成 常量a const int *p;//常量指针,所指向的内容数据不可以修改 int const *p;//常量指针,所指向的内容数据不可以修改 int *const p;//常量指针,所指向的地址不可以修改,所指向内容可以修改 typedef 关键字: 给已知数据类型起一个别名 如: typedef unsigned int uint;//用uint 来 表示无符号整形 typedef void(*p)(void);//定义一个函数指针(参数为void,返回值也为void),它的类型名为p p fun;//定义一个函数指针,变量名为fun register 寄存器变量: 修改变量的存放位置,原来变量都是存放在内存中,如果是寄存器变量,则存放在芯片中的寄存器中(寄存器变量相较于存放在内存中的普通变量,在运算速度要更加快,所以一种变量是需要经常使用的话,就可以将它声明为寄存器变量,但是目前的编译器很高级,会自动判断并修改变量的存放位置) extern 外部变量: 假设有多个C文件共用一个全局变量的话,我们需要在其他C文件中声明该变量为外部变量,就是表示该变量的初始化在其他的C文件中的意思。 volatile 不可忽略变量:有一些编译器比较高级,它会忽略我们代码中的一些没有意义的运算。(例如:51单片机中的延时)所以要加该变量,让有关该变量的运算不可以忽视。
二、预处理指令
有篇文章讲预处理、宏定义以及条件编译讲述的很详细: 下面简单介绍一些需要知道的知识,部分摘自 预处理指令: 以 # 为开头的代码行,后面跟的是 指令关键字 指令 用途 # 空指令,无任何效果 #include 包含一个源代码文件 #define 定义宏 #undef 取消已定义的宏 #if 如果给定条件为真,则编译下面代码 ----------> 可以用来调试代码使用,还可以用来注释代码 #ifdef 如果宏已经定义,则编译下面代码 #ifndef 如果宏没有定义,则编译下面代码 ----------> 防止头文件的重复声明 #elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码 #endif 结束一个#if……#else条件编译块 #error 停止编译并显示错误信息 C语言中的头文件: #include <stdio.h> // 从官方库文件路径去寻找头文件所在的路径 #include "stdio.h" //从当前目录去寻找头文件的路径 头文件的一般作用: 存放一些函数的声明,结构体的声明,变量的声明,外部接口声 宏定义:增强代码的 可读性 与 移植性 如: #define MAX 10 //使用MAX来代替10 #define MAX(a,b) ((a)>(b) ? (a) : (b)) //带参数的宏,加括号是为了保证运算的正确性 若: #define M(x) x*x*x int x = 8+2; 则:volnum = M(x);//------->8+2*8+2*8+2 会与期望得到的值有很大差别