学习笔记7-C语言预处理

原创 2015年11月19日 18:49:30

1     typedef使用

简单说就是给已存在的数据类型起别名。

形式

typedef 原类型名 新类型名;

 

1)typedef与基本数据类型

typedef int  INT;

定义之后 INT就可以代替int 使用。

2)typedef与数组

typedef int ARRRY[5];

ARRRY arr; //等效于 int a[5];

3)typedef与结构体

struct Person{

         int age ;

         char *name[20];

};

typedef  struct PersonP;

P 的作用等效 struct Person

 

定义结构体的时候起别名。

typedef struct Car{

        成员变量列表;

}CAR;

匿名结构体起别名

typedef struct {

        成员变量列表;

}CAR;

 

3)typedef与枚举

类似结构体

typedef enum Color{ } COLOR;

4)typedef 与函数指针

int (*p)(int,int);

typedef int (*F)(int,int);

F p;   //等效于int (*p)(int,int)

 

2     预处理指令

 

在c语言中,以 # 开头的命令。 include  define和条件编译。

 

1) 有参宏

#define 宏名 宏值(可以是常量、变量和表达式)

宏替换

编译之前把宏替换为宏值。完全替换不会添加或减少其他字符。

 

       注意

       宏名一般大写

       宏定义不是语句,末尾无分号

       宏定义必须写在函数之外,作用域从定义开始到程序末尾或者取消宏定义的地方。

#undef 宏名

 

2) 有参宏

#define 宏名(形参表) 字符串

 

#define SUM(a)  a+a

#define SUM(x,y)  x*y+x+y

#define SUM(x)   x*y+x+y  //使用时需要提前定义y

 

         注意

宏替换时会把宏带入,同时会把参数的值带入

宏名和参数之间不能有空格。

形参不分配内存单元不需要定义类型。只是符号代换。

         参数最好用小括号括起来。

     

        举例使用有参宏求两个数最大

                #defineMAX(a,b)  a>b?a:b

3) typedef 和define区别

都可以起别名

#define INT int *

typedef int *  INTER

宏使用的时候只是展开

INT a ,b ;//等效 int * a ,b;

INTER a ,b ;//等效与 int *a ;int* b;

 

4) 条件编译

根据不同的条件编译不同的程序部分,产生不同的目标文件。

条件编译指令

#if 常量表达式

        程序段1

        #elif

程序段2

#endif


条件编译&代码调试打印日志

#ifdef 宏名

        代码段

#else

        代码段

#endif

检测是否定义了宏名

DEBUG这个宏系统已经定义 默认值为1

 

设置显示调试信息的宏

#define  DEBUG== 1 

        #Log(format,…) printf(format,##__VA_ARGS__); //format 为形参 …表示参数可以为1个或者多个。##表示可以为0个参数。

#else

        #Log(format,…);

#endif

 

3     static和extern

 

static 和extern 都可以修饰变量。

        static修饰的变量,内部变量,只有包含变量定义的源代码的文件都可以访问

        extern修饰的变量,外部变量,所有的文件都可以访问,只要有声明就行。

 

static对局部变量作用: 延长局部的生命周期,但是没有改变作用域。变量不销毁

                                    变量的声明只在第一次调用时执行。

extern 不能修饰局部变量。

 

static对全局变量的作用:全局变量只能在当前文件中使用。(内部变量)

extern 对全局变量的作用:可以在除自身文件之外的文件中使用。(外部变量)

                                            与其他文件中的全局变量不能同名。

                                           全局变量默认为外部变量。

static修饰函数   自能在自身文件中访问 (内部函数)

extern 修饰函数  可以在其他文件中使用。(外部函数)默认

可以通过调用外部函数,外部函数调用内部函数,实现不同文件之间的函数调用。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

学习笔记2-C语言的运算符和程序结构

一  运算符 1 运算符及分类   运算符是特定的算术或者逻辑符号。   1)按功能分类 算术运算符、关系运算符、逻辑运算符和按位运算符。 2)按操作数的个数分类 单目运算符、双目运算...

学习笔记4-C语言数组和字符串

数组的基本概念及分类       数组:把具有相同类型的若干变量安装有序的形式组织起来。这些按序排列的同类型数据的集合称为数组。        数组元素:构成数组的数据。每个数组元素有相...

学习笔记9-OC入门基础

1     import 引入头文件 可以防止重复包含 include 需要预处理指令。 2     NSLog    参数的是NSString 类型对象 print...

C语言中Union类型的使用方法

使用C语言时,常常使用struct,对于union类型却几乎没有用过,只知道它是联合类型,各字段共享一块内存,实际应用中却不知道它的具体用途。 今天读《编程卓越之道》中看到有对其使用的简单介绍,记录...
  • feimor
  • feimor
  • 2011-10-10 10:32
  • 6739

学习笔记3-C语言函数进制

函数的概述   C语言程序是由函数组成的。函数是C程序的基本模块,通过函数模块的调用实现特定的功能。 函数的优点:提高程序的可读性,提高开发效率和提高代码的重用性。   1函数分类 ...

(C语言)共用体union的用法举例

以前在学校学习C语言的时候一直搞不懂那个共用体union有什么用的。工作之后才发现它的一些妙用,现举例如下:1. 为了方便看懂代码。比如说想写一个3 * 3的矩阵,可以这样写:[注:下面用红色部分标记...

自适应滤波

对于一些事先并不知道所需要进行操作的参数的应用,例如一些噪声信号的特性,要求使用自适应的系数进行处理。在这种情况下,通常使用自适应滤波器,自适应滤波器使用期望和反馈来综合调整滤波器系数以及频率响应。常...

联合体(union)的使用方法及其本质

6.本质&进阶: 根据union固定首地址和union按最大需求开辟一段内存空间两个特征,可以发现,所有表面的定义都是虚的,所谓联合体union,就是在内存给你划了一个足够用的空间,至于你怎么玩~它...

学习笔记10-OC类的特性

1     NSString 类 处理字符串的类。 1) 创建常量字符串 NSString  *str =@”abc“;  //str 为指针变量  ”abc“为字符串常量    &...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)