#define N 5,只是 define 非常基础的用法之一。C语言中的“函数式宏定义” C语言中的 define 宏定义可以像函数那样接收参数(这种宏定义常被称作“函数式宏定义”),不过不能像函数那样提供参数的类型检查,这个特点在有些程序员看来是不安全的。但是,函数式宏定义不关心参数类型这个特点,有时候也会被利用起来,写出...
我们当然可以对我们的宏函数再优化一下写法,一般都是“括号大法”,不管需不需要,统统都用括号包住,防止宏替换之后改变了原有表达式的优先级和语义,把宏定义做如下改写:#define MAX(x,y) (((x)>(y))?(x):(y))程序运行的结果就变成了-1。因为整个表达式都用括号包住了,所以替换后也没有破坏原有的...
一、关键字enum的定义enum是C语言中的一个关键字,enum叫枚举数据类型,枚举数据类型描述的是一组 整型值的集合(这句话其实不太妥当),枚举型是预处理指令#define的替代,枚举和宏其实非常类似,宏在预处理阶段…
#define 指令中的名字与变量名的命名方式相同,替换文本可以是任意字符串。通常情况下, #define 指令占一行,替换文本是 #define 指令行尾部的所有剩余部分内容,但也可以把一个较长的宏定义分成若干行,这时需要在待续的行末尾加上一个反斜杠符 \ 。 #define 指令定义的名字的作用域从其定义点开始,到被编译的源文...
#include<stdio.h>voidfunc1(void);voidfunc2(void);#if0//宏替换#define u8 unsigned char #define u16 unsigned short #define u32 unsigned int #endif #if1//声明一种新类型typedef unsigned char u8;typedef unsigned short u16;typedef unsigned int u32;//声明新数据类型: 函数指针类型: 类型名称 fu...
语法:宏使用 #define 关键字定义,而内联函数使用 inline 关键字定义。 作用时间:宏在预处理阶段进行文本替换,而内联函数在编译阶段进行类型检查和可能的替换。 可调试性:由于宏是文本替换,所以调试宏可能比调试内联函数更加困难。 使用建议 当需要快速替换一段代码,并且不关心类型检查时,可以使用宏定义。
取模的一种替代方法 我们使用取余数操作符来提供算数取模。但有时可以结合使用if语句进行取模操作。考虑如下两个例子: uint modulo_func1 (uint count) 优先使用if语句,而不是取余数运算符,因为if语句的执行速度更快。这里注意新版本函数只有在我们知道输入的count结余0至59时在能正确的工作。
define函数的作用非常广泛。它可以用来定义常量,例如:#define PI 3.14159,这样就可以在代码中直接使用宏名PI代替3.14159。另外,define函数还可以用来 定义函数,例如:#define MAX(x,y) ((x)>(y)?(x):(y)),这样就可以在代码中调用MAX函数来比较两个数的大小。使用define函数需要注意以下几点。首先,宏...
6.函数指针 例如: typedef int (*func)(void) 描述: func等价于int (*)(void)类型 func pf等价于int (*pf)(void)声明,pf是一个函数指针变量 typedef关键字与#define宏定义的区别 #define 是 C 指令,用于为各种数据类型定义别名,与 typedef 类似,但是它们有以下几点不同: ...
#define TRUE 1 #define Add(a,b) ((a)+(b)); #define Loop_10 for (int i=0; i<10; i++) 在Scott Meyer的Effective C++一书的条款1中有关于#define语句弊端的分析,以及好的替代方法,大家可参看。 三、typedef与#define的区别 从以上的概念便也能基本清楚,typedef只是为了增加可读性而为标识符另...