【C语言总结】宏定义,预处理

宏定义

简单宏

格式:#define 标示符 替换列表

#define N 100
int a[N];//N就是100

带参数的宏

格式:#define 标示符(x1, x2, x3,……xn) 替换列表

#define MAX(x, y) ((x) > (y) ? (x) : (y))

注意:程序编译的时候会把大写的标示符替换成原来的表达式,所以编译时候程序会增大。

优点或者缺点

优点

①程序可能会稍微快些

②宏会更通用

缺点

①编译后代码通常会变大

②无法用指针指向一个宏

③宏可能会不止一次的计算它的参数

宏定义中括号的使用

#define TWO_PI (2 * 3.1415)

#define RES(x) ((x) * 10)

原因:因为宏在编译的时候是替换表达式,所以很多不确定因素

例如:

#define RES(x) (x * 10) //假如宏是这样定义的,参数没有括号
int j = RES(i + 1);
int j = i + 1 * 10; //编译器会替换成这样。与结果完全不对

取消宏

格式:#define N

条件编译

#if 常量表达式
    编译内容
#endif
defined运算法仅用于预处理器,N必须是定义的宏
#if defined(N)
....
#endif

ifdef指令测试一个标示符是否已经定义为宏

#ifdeft 标示符
......
#endif
#ifndef 标示符
......
#endif
时间: 2024-10-12 04:45:21

【C语言总结】宏定义,预处理的相关文章

C语言中宏定义(#define)时do{}while(0)的价值(转)

C语言中宏定义(#define)时do{}while(0)的价值 最近在新公司的代码中发现到处用到do{...}while(0),google了一下,发现Stack Overflow上早有很多讨论,总结了一下讨论,加上自己的理解,do{...}while(0)的价值主要体现在: 1. 增加代码的适应性 下面的宏定义没有使用do{...}while(0) #define FOO(x) foo(x); bar(x); 这样宏定义,单独调用不会出现问题,例如: FOO(100) 宏扩展后变成: 1 f

单片机学习之:C语言基础——宏定义(#define)

例如: #define uint unsigned int //用uint来代替(表示)unsigned int,语句前有#,后面无须加分号“;” uint可为除关键字以外的任意字符,以方便书写.同理:#define uchar unsigned char 单片机学习之:C语言基础--宏定义(#define)

C语言中宏定义使用方法详解

C语言中的宏替换详解 首先看一个问题: #include <stdio.h> #define    PRINT_CLINE()    printf("%d", ______) int main(void) { PRINT_CLINE(); PRINT_CLINE(); return 0; } 在横线处填上适当的代码,使得上面这段代码的输出为34. 我想一般人看到这个问题的时候头脑里都没有明确的思路来解答这个它.我看到这个问题的时候想出了各种办法来解答它,最终还是没有通过编译

【编程基础】C语言常见宏定义

我们在使用C语言编写程序的时候,常常会使用到宏定义以及宏编译指令,有的可能比较常用,有的可能并不是很常用,是不是所有的C语言宏定义以及宏指令你都清楚呢? 指令 用途详细介绍 # 空指令,无任何效果 #include 包含另外一个文件 #define 定义宏 #undef 取消已定义的宏 #if 如果给定条件为真,则编译下面代码 #ifdef 如果宏已经定义,则编译下面代码 #ifndef 如果宏没有定义,则编译下面代码 #elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码,其

【学习笔记】【C语言】宏定义

1.宏定义可以分为2种:不带参数的宏定义 带参数的宏定义 2.定义 一般形式#define 宏名 字符串比如  #define ABC 10右边的字符串也可以省略,比如#define ABC 3.作用 它的作用是在编译预处理时,将源程序中所有"宏名"替换成右边的"字符串",常用来定义常量.接下来写个程序根据圆的半径计算周长 4.例子 在第4行定义了一个叫PI的宏,在编译预处理之后,第8行中的2 * PI *radius就会变成2 * 3.14 * radius. 1

C语言学习——宏定义

1.简单的宏定义 #define <宏名> <字符串> 例:#define LEN 0.5 2.带参数的宏定义 #define <宏名> (<参数表>) <宏体>例:#define Fun(para) para*2 3.实例分析 1 #define VALUE 2+2 2 void main() 3 { 4 int n=VALUE*VALUE; 5 printf("%d",n); 6 } 这段代码的输出是多少呢?16?也许会让

C语言中宏定义之 ## 用于可变参数

GCC 支持复杂的宏,它使用一种不同的语法,使你可以给可变参数一个名字,如同其它参数一样,比如: 引用 #define debug(format, args...) fprintf(stderr, format, args) 这种定义可读性更强,也更容易描述.完整测试代码: 引用 #include <stdio.h> #define debug(format, args...) fprintf(stderr, format, args) int main(){    char a[20] = 

c语言中宏定义#和 ##的作用:

转载:http://www.cnblogs.com/cyttina/archive/2013/05/11/3072969.html 看了这篇文章后了解了,但是文章中的例子比较特别,我在这里加个注释好了. http://www.cnblogs.com/welkinwalker/archive/2012/03/30/2424844.html 单井号就是将后面的 宏参数 进行字符串操作,就是将后面的参数用双引号引起来 双井号就是用于连接. 比如文章中的例子: #define PRINT(NAME) p

#if defined和#if !defined(c语言的宏定义)

我们要检查a是否定义 #if defined a #undef a #define a 200 #endif 上述语句检验a是否被定义,如果被定义,则用#undef语句解除定义,并重新定义a为200 #ifndef a    //如果a没有被定义 #define a 100 #endif #undef为解除定义 #ifndef是if not defined的缩写,即如果没有定义 作用 1 条件编译 #if !defined XXX_XXX #define XXX_XXX #endif 2 错误信

[转载]c语言宏定义

一. #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利. 1 #define命令剖析 1.1   #define的概念 #define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为