宏定义能否被赋值

  计算机科学里的宏(Macro),是一种批量批处理的称谓。一般说来,宏是一种规则或模式,或称语法替换 ,用于说明某一特定输入(通常是字符串)如何根据预定义的规则转换成对应的输出(通常也是字符串)。这种替换在预编译时进行,称作宏展开。

  发现定义中有意思的点在于这个“语法替换”,。

  当宏定义值本身为常量时,这个宏就替换为一个常量,

    如:“#define MACRO_B 200”,MACRO_B就不可以被重新赋值。

  当宏定义本身代表了一个变量时,这个宏就替换了这个变量,也就同时拥有了该变量可以被赋值的特点,

    如

    “#define MACRO_C (a)

    int a = 10;”

  此时MACRO_C代替了整形变量a,同时MACRO_C也可以被赋值。

原文地址:https://www.cnblogs.com/HScholar/p/12212973.html

时间: 2024-10-28 10:37:37

宏定义能否被赋值的相关文章

让人懵逼的宏定义赋值

先上源代码: 文件为portmacro.h,来源于Dynasty项目中的底层代码(NVIC中断控制部分) 1 #define portNVIC_INT_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000ed04UL ) ) 2 #define portNVIC_PENDSVSET_BIT ( 1UL << 28UL ) 3 4 5 void vPortYield( void ) 6 { 7 /* Set a PendSV to request a con

指针直接赋值为整型AND利用宏定义求结构体成员偏移量

首先我们要更正一个很熟悉的概念,那就是指针不仅仅是“地址”,指针还有一个很重要的特性,那就是“类型”. 指针初始化时,“=”的右操作数必须为内存中数据的地址,不可以是变量,也不可以直接用整型地址值(但是 int *p = 0; 除外,该语句表示指针为空): 所以 int *p = 10; 这样的代码是不允许的.在C++里面直接是error的,即使在一些C编译器中以warning的形式提示,但是warning有的时候也很严重.所以这种东西不要用.从const int到int*是不存在隐士转换的.

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

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

Linux下的两个经典宏定义 转

http://www.linuxidc.com/Linux/2016-08/134481.htm http://blog.csdn.net/npy_lp/article/details/7010752 http://www.linuxdiyf.com/viewarticle.php?id=104768 本文首先介绍Linux下的经典宏定义,感受极客的智慧,然后根据该经典定义为下篇文章作铺垫. offsetof宏定义: // 获得结构体(TYPE)的变量成员(MEMBER)在此结构体中的偏移量.#

宏定义的黑魔法 - 宏菜鸟起飞手册

转载:https://onevcat.com/2014/01/black-magic-in-macro/ 宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似乎对宏的使用和依赖并不多.但是使用宏定义的好处是不言自明的,在节省工作量的同时,代码可读性大大增加.如果想成为一个能写出漂亮优雅代码的开发者,宏定义绝对是必不可少的技能(虽然宏本身

宏定义_最大最小值

源码里面的最大最小值宏定义是这个样子 #define __max(a,b) (((a) > (b)) ? (a) : (b)) #define __min(a,b) (((a) < (b)) ? (a) : (b)) 一直说宏定义要加一堆括号,才能正常的使用.虽然没有inline方便.不过,不可否认,底层用c确实很cool. 说白了就是运算符优先级的关系,自行脑补... C语言运算符优先级 说明:同一优先级的运算符,运算次序由结合方向所决定.简单记就是:! > 算术运算符 > 关系

&lt;28&gt;【了解】10-枚举类型介绍及定义+【掌握】11-枚举变量变量定义和使用+【掌握】13-typedef定义新的类型+【掌握】15-宏的概念及无参宏定义方法+【掌握】16-有参宏定义和使用方法+【掌握】17-应用:使用有参宏求最大值+【掌握】18-typedef和#define的区别

[了解]10-枚举类型介绍及定义 枚举类型: C语言提供了一个种类型,这种类型的变量的取值被限定在一定的范围之内了 枚举类型的定义: enum 枚举类型名{ 枚举值1,枚举值2,.... }; 举例: 定义一个变量,保存一周的第几天 enum weekday{ zhouyi,zhouer,zhousan,zhousi,zhouwu ,zhouliu,zhouri }; 定义iPhone手机的颜色 关于枚举类型元素的命名习惯 enum iColor{kIcolorWhite,kIcolorBlac

c++ 宏定义 ## 的使用

一年半前,见过宏定义##的使用,实现类似反射机制,通过字符串创建类对象的代码,感觉很神奇. 两个月前,利用##的语法,实现一个小功能,通过机组字符串排列组合,调用一个万行代码,计算功能类的函数接口. 三四天前,简单概要的把代码提纯,记录下来,以备后用.代码量不多,但每次写都好费劲,至少写了5遍了,仍然费劲. main.cpp 1 #include <iostream> 2 #include "register.h" 3 #include "registerfun.

C语言编程入门——枚举与宏定义

枚举是编程人员自己定义的一种基本数据类型,这种类型的变量只能取枚举中的值,好处就是能够防止变量的错误赋值.用法:enum 类型名{变量1,变量2,变量3,...} C语言中宏定义是定义在程序头部,作预处理用,有无参和有参两种,可以看作是一个过程的调用,与函数调用不一样,不涉及入栈出栈问题,调用速度快.用法:#define 替换名 原名 宏定义示例1: # include <stdio.h> #define DD "%d" //宏定义,在以下书写中可用DD代替"%d