zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C语言学习笔记——补充知识

C语言笔记学习 知识 补充
2023-09-11 14:21:43 时间

一、关键字

由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单片机中的延时)所以要加该变量,让有关该变量的运算不可以忽视。

二、预处理指令

有篇文章讲预处理、宏定义以及条件编译讲述的很详细:C语言 条件编译详解

下面简单介绍一些需要知道的知识,部分摘自C语言 条件编译详解

  • 预处理指令:
  • 以  #  为开头的代码行,后面跟的是 指令关键字 
  • 指令             用途
  • #                  空指令,无任何效果
  • #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   会与期望得到的值有很大差别