精华内容
下载资源
问答
  • 宏定义和全局变量的区别

    千次阅读 多人点赞 2017-09-05 12:40:21
    宏定义和全局变量的区别

    宏定义和全局变量的区别

    本文参考:
    (http://zhidao.baidu.com/link?url=e0AgK3IuoChxC9Cv7vl3D0OacTUdj4DRf60XHTFti5goaquEzwZWR_G_22jWQO8BJ8zs30lA37_Ry-lZdBtTsK)

    1. 宏会在预处理阶段被替换,而全局变量是在运行时;
    2. 宏定义不分配内存,全局变量定义需要分配内存;
    3. 宏不区分数据类型,它本质上是一段字符,在预处理的时候被替换到引用的位置,而全局变量区分数据类型;
    4. 宏定义之后值是不能改变的,全局变量的值是可以改变的;
    5. 宏定义只有在定义所在文件,或引用所在文件的其它文件中使用。 而全局变量可以在工程所有文件中使用,只需在使用前加一个声明。

    展开全文
  • 宏定义、const变量、枚举的区别

    千次阅读 2014-09-20 10:45:42
    1.宏定义是在预处理阶段进行展开;cnost变量是在编译运行阶段使用 2.宏定义没有类型,不做任何类型检查,仅仅是...3.枚举具有类型,但宏定义没有类型,枚举与普通变量有作用域和值,但宏定义没有,它是一种预处理替换


    1.宏定义是在预处理阶段进行展开;cnost变量是在编译运行阶段使用

    2.宏定义没有类型,不做任何类型检查,仅仅是进行展开;const修饰的变量具有具体的类型,编译阶段执行检查

    3.宏定义在文件中有多少次就展开多少次,不会分配内存空间;const修饰的变量会在内存中分配空间


    1.枚举属于常量;但宏定义不是常量

    2.枚举常量是实体的一种;但宏定义不是实体

    3.枚举具有类型,但宏定义没有类型,枚举与普通变量有作用域和值,但宏定义没有,它是一种预处理替换

    展开全文
  • 宏定义变量

    千次阅读 2020-10-13 17:11:31
    STM32库函数的宏定义 #if defined ( __CC_ARM ) #define __ASM __asm /*!*/ #define __INLINE __inline /*!*/ #elif defined ( __ICCARM__ ) #define __ASM __asm /*!*/ #define __INLINE inline /*!! */ #elif ...

    LINE :当前程序行的行号,表示为十进制整型常量
    (这里应该注意应该用强制转换进行转换,C51用%d直接输出可能出错)

    FILE :当前源文件名,表示字符串型常量
    DATE :转换的日历日期,表示为Mmm dd yyyy 形式的字符串常量,Mmm是由asctime产生的。
    TIME :转换的时间,表示"hh:mm:ss"形式的字符串型常量,是有asctime产生的。(asctime貌似是指的一个函数)
    STDC :ANSI C进行编译
    STDC_VERSION :如何实现复合C89整部1,则这个宏的值为19940SL;如果实现符合C99,则这个宏的值为199901L;否则数值是未定义
    STDC_EOBTED :(C99)实现为宿主实现时为1,实现为独立实现为0
    STDC_IEC_559 :(C99)浮点数实现复合IBC 60559标准时定义为1,否者数值是未定义
    STDC_IEC_559_COMPLEX: (C99)复数运算实现复合IBC 60559标准时定义为1,否者数值是未定义
    STDC_ISO_10646 :(C99)定义为长整型常量,yyyymmL表示wchar_t值复合ISO 10646标准及其指定年月的修订补充,否则数值未定义
    __cplusplus : C++编译器

    C语言中的__FILE__、__LINE__和__DATE__等都在头文件#include<stdio.h>中

    STM32库函数的宏定义

    #if defined ( __CC_ARM   )
      #define __ASM            __asm        /*!< asm keyword for ARM Compiler        */
      #define __INLINE         __inline     /*!< inline keyword for ARM Compiler     */
    
    #elif defined ( __ICCARM__ )
      #define __ASM           __asm         /*!< asm keyword for IAR Compiler        */
      #define __INLINE        inline        /*!< inline keyword for IAR Compiler. Only avaiable in High optimization mode! */
    
    #elif defined   (  __GNUC__  )
      #define __ASM            __asm        /*!< asm keyword for GNU Compiler        */
      #define __INLINE         inline       /*!< inline keyword for GNU Compiler     */
    
    #elif defined   (  __TASKING__  )
      #define __ASM            __asm        /*!< asm keyword for TASKING Compiler    */
      #define __INLINE         inline       /*!< inline keyword for TASKING Compiler */
    
    #endif
    

    __CC_ARM对应的平台是:ARM RealView:(也就是MDK) RealView,是一套包含编译、调试和模拟的开发工具,需结合开发环境如uvision、eclipse或者CodeWarrior,形成集成开发环境来使用。

    __ICCARM__对应的平台是:IAR EWARM: Embedded Workbench for ARM 是IARSystems 公司为ARM 微处理器开发的一个集成开发环境(下面简称IAR EWARM)。比较其他的ARM 开发环境,IAR EWARM
    具有入门容易、使用方便和代码紧凑等特点

    __GNUC__对应的平台是:GNU Compiler Collection: GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。

    __TASKING__对应的平台是:Altinum Designer;

    转自:
    https://blog.csdn.net/qq_33706673/article/details/78628202
    https://www.cnblogs.com/dylancao/p/12306746.html

    展开全文
  • 宏定义与静态变量的区别

    千次阅读 2016-03-15 14:49:02
    但是如果定义比较简短,比如就是一个值,那么可以直接使用。 静态变量就不会有替换问题了,但是静态变量在运行的时候系统会在栈上为其分配内存,一直到程序结束才会被销毁。而且静态变量只能存储值,而不能...

    所有的宏在被编译之前都会被其定义替换掉,就是说如果一个宏的定义是一串很长的代码,而且这个宏被多次使用,那么编译后将会使用该宏的定义替换掉那些使用宏的地方,所以就会出现很多重复的代码,这是很低效的。但是如果宏的定义比较简短,比如就是一个值,那么可以直接使用宏。 静态变量就不会有替换问题了,但是静态变量在运行的时候系统会在栈上为其分配内存,一直到程序结束才会被销毁。而且静态变量只能存储值,而不能定义操作,而宏的定义既可以是一个值,也可以是一系列操作。 如果一个值使用次数不多,或者希望执行一系列操作而又不想定义函数的话使用宏是不错的选择。 如果一个值使用次数比较频繁,则推荐使用静态变量。

    展开全文
  • 宏定义到static变量

    千次阅读 2013-10-10 09:11:19
    作为传统的C程序员,深觉得宏定义简单,灵活,效率高。最近开始写java代码,没有了宏,突然之间连怎么写判断语句都不会了,总不能直接拿数字去判断吧。 后来请教别人,找到了个替代的方法,在类里声明一个static ...
  • define宏定义和局部变量的生命周期

    千次阅读 2016-03-01 21:40:40
    考察define和局部变量#include <stdio.h>#define func1(A,B) A=A+B; B=A-B; A=A-B;int func2(int A, int B) { int c = 0; c = A; A = B; B = A; }int main(int argc, char * argv[]) { int a = 3, b =
  • 宏定义(#define):  宏定义实际上是一种替换技术,是一种自我欺骗的手法,其目的是提高程序的可读性和简洁性。宏定义是给编译器准备的,编译完成后其中的宏就已经被实际内容所取代。  因此,通过#define“定义...
  • 利用宏定义动态构造变量

    千次阅读 2005-01-17 19:24:00
    利用宏定义动态构造变量在c/c++中利用宏预定义是非常好的选择,特别是加上##,功能更加强大。看例子先:#include "stdio.h"#define convar(head , index) head##indexint main(){ int a1 = 3 ; convar(a , 1) = 4;...
  • iOS开发之宏定义实现变量名拼接

    千次阅读 2016-04-20 23:30:28
    iOS开发之宏定义实现变量名拼接
  • 全局变量宏定义

    千次阅读 2014-08-25 13:55:54
    众所周知,全局变量应该是得到内存分配且可以被其他模块通过C语言中extern关键字调用的变量。因此,必须在 .C 和 .H 文件中定义。这种重复的定义很容易导致错误。 Error[e46]: Undefined external "SerBfr" ...
  • 关于变量定义,声明,宏定义

    千次阅读 2017-12-15 15:35:57
    对于C/C++语言,如果向变量共享,则可以在一个源文件A.cpp中定义变量,然后B.cpp想要使用的时候,加上extern 声明即可。如果是多文件共享,则可以在某个源文件中定义,在某个头文件中用extern声明,然后其他想要使用...
  • 今天难得静下心来,先总结下有关“交换两个变量宏定义实现”的三种方式,相信没思考过的朋友们第一次遇到这种问题一定是需要一点时间去思考的,哪怕有个结果但也不一定是你今天看到了这三种,其实这都是日常的积累...
  •   今天照着《数据结构与算法分析——C语言描述》写快速排序的时候,遇到一个让我百思不得其解的问题,每次都无法得到正确的排序,最后发现结果跟算法的设计一点关系也没有,而是C语言中宏定义的一个大坑,或者说是...
  • 宏定义函数2 类同于宏定义变量

    千次阅读 2007-06-28 13:05:00
    #define get_seg_byte(seg,addr) ({ /register char __res; /__asm__("push %%fs;mov %%ax,%%fs;movb %%fs:%2,%%al;pop %%fs" / :"=a" (__res):"0" (seg),...}) 解释:这个宏定义的括号里的内容的最后部分__res;作为
  • 结构体的成员名和变量名不在同一命名空间中,编译器可以从语法上区分成员名和变量名,所以结构体的成员名和变量可以取一样的,不冲突; 枚举类型的成员是常量,它们的值由编译器自动分配,从0开始,当然也可以人为...
  • 宏定义

    2020-11-05 17:18:01
    宏定义与全局变量的区别 1. 宏定义的优点 1.方便程序的修改 使用简单宏定义可用宏代替一个在程序中经常使用的常量,这样在将常量改变时,不用对整个程序进行修改,只需修改宏定义的字符串即可;当常量比较长时,也...
  • C语言学习(十七)全局变量 宏定义

    千次阅读 2019-02-22 20:30:58
    定义在函数外面的变量是全局变量,全局变量具有全局的生存期和作用域,它们与任何函数都无关,在任何函数内部都可以使用它们。 例1:全局变量 #include&lt;stdio.h&gt; int f(void); int g=12; //定义全局...
  • C语言常规优化策略4 参数传递、宏定义、全局变量与汇编按照结构化程序设计的原则,一种语言,如果具有赋值、选择与循环三种结构,并严格按照这三种结构来组织程序,避免使用象goto语句这类使程序控制发生跳转的语言...
  • 学过C语言的人都知道,我们可以通过struct定义自己的数据集合,从而实现对数据的封装功能。 在实际的项目实践中,struct定义的结构随处可见。使用struct并不难,网上也有很多介绍struct的文章。 从如构定义到如何...
  • VIM C/C++函数名,宏定义变量的高亮之前写qt的时候用过一段时间的Qtcreator,后来自己用vim写程序的时候才发现vim本身对于函数,用户自定义的结构,变量,还有宏定义是没有高亮的。网上百度了一下好像也没有相关的...
  • 1、在./mediatek/config/gxq15_ics/ProjectConfig.mk中添加 变量 PALADIN_UI_YITI = no ...上面添加完了,就可以编译啦:./mk systemimage && ./mk update-api。会将变量自动添加到 FeatureOption.java里
  • C/C++动态宏定义变量

    千次阅读 2018-03-30 22:26:59
    /* * test_define.cpp * * Created on: Mar 30, 2018 * Author: zlf */ #include using namespace std; #define New_Variable(name, i) int name##i int main() { cout; New_Var
  • 面试中经常考到的一个题。原理跟 a=a+b;...//宏定义 交换两个变量的值。使用异或运算。 #define SWAP(a,b) {a=a^b; b=a^b; a=a^b;} int main() {  int i, j;  i = 1213;  j = 1314;  SWAP(i, j);  ...
  • ``` #include #define A 10; int fun(int a,int b) { return a+b; } int main () { int a=0;...为什么宏定义变量标识符A可以直接与a进行运算,但是不能带入函数内使用, 使用强转类型也不可以
  • 经常手动敲打字符串,显示才显示出...现在,使用宏定义 #define my_int(n) printf(#n" = %d\n", n) 就搞定了。 示例代码: #include #define my_int(n) printf(#n" = %d\n", n) typedef struct { int a;
  • ![图片说明](https://img-ask.csdn.net/upload/201512/10/1449754617_862964.png) 这个错误提示是什么啊。。我明明宏定义了这个变量的啊。。mfc。。求助
  • 宏定义有无参数宏定义和带参数宏定义两种。  无参数的宏定义的一般形式为  # define 标识符 字符序列 其中# define之后的标识符称为宏定义名(简称宏名),要求宏名与字符序列之间用空格符分隔。这种宏定义要求...
  • linux驱动 内核函数 变量 宏定义

    千次阅读 2010-06-17 13:56:00
    读书笔记: 我们写驱动时接触到的内核函数, 变量, 宏定义, 和 /proc 文件. 它的用意是作为一个参考insmodmodprobe(自动检测 模块加载时需要的别的模块)rmmod 用户空间工具, 加载模块到运行中的...
  • 关于在一些基本应用。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 238,488
精华内容 95,395
关键字:

宏定义可以是变量吗