C/C++ 临时 取消 宏定义

供稿:hz-xin.com     日期:2025-01-13
关于C++宏定义避免多次包含的问题,如何解决?

首先,这些宏定义不是在cpp文件中,而是在头文件中的。还知道,头文件一般是用来声明的,会被其他的源文件和头文件include,当被多个文件include的时候就会造成重复声明。为了使得只声明一次,引入问题中所说的宏定义,一般以文件名大写和_来当宏的名字。

1. 宏定义的替代方案是 枚举, 这就有点像结构体了

2. 宏定义不能用代码修改. 因为宏定义是编译期之前的概念, 代码是无能为力的

定义宏的时候:
#ifndef _MY_FUN_ //随意起的一个名字,做标示用
#define //这一行是你的宏定义
#endif

使用的时候:
如果你要调用你的函数,而不是宏定义
#ifndef _MY_FUN_
#define _MY_FUN_
//写你调用的函数部分
#endif

这样就区分开了,不过宏定义一般的名字都是全部大写,函数名字一般都是首字母大写,这是按照国际标准的匈牙利命名法来区分的,可以让人一眼就能看出来你这个名字代表什么意思,不建议你随意的给函数,变量,宏定义等等的任意取名,这是一种非常不好的命名习惯。

你的函数名称
不应该命名跟系统的宏名称一样。
C++里面有个方法可以避免你这个问题,叫做名字空间。
把你的函数定义到名字空间里去。

比方你A库的宏是HHH,B库的函数是HHH()
A库的宏你虽然不能改,但是能看到源码吧
比方是#define HHH 1

你的代码这样写就行:

#undef HHH
HHH() // 你的调用过程
#define HHH 1 // 和A库一样

C\/C++中如何获取数组的长度?
以下是两个Demo程序,一个C语言的,一个C++的:P.S:若数组为存储 字符串的字符数组,则所求得的长度还需要减一,即对于宏定义: #define GET_ARRAY_LEN(array,len) {len = (sizeof(array) \/ sizeof(array[0]) - 1 );} ,对于函数定义:template int getArrayLen(T& array){return (...

C++函数里面可以使用宏定义吗
函数里可以使用宏,但一般写程序都放在前面。如果放在函数里则宏的作用域较小,在定义宏之前不能使用该宏,而且改变该宏的值时不容易找到。例:include "iostream.h"int Fun(int a);\/\/函数声明 int main(){ int a;a=2;cout<<a<<endl;a=Fun(a);cout<<a<<endl;return 0;} int Fun(int...

C++——常量
定义后能否取消:宏定义可以通过 #undef 来使之前的宏定义失效(取消后可以重新定义),而 const 常量定义后将在定义域内永久有效。是否可以做函数参数:宏定义不能作为参数传递给函数,而 const 常量可以在函数的参数列表中出现。其他方面:const 定义的常数是变量也带类型,而 #define 定义的只是个常数...

c\/c++ 类永远只是声明
所以和在C++中不同,我们不会碰到任何涉及提前引用的问题。(14) Java没有预处理机。若想使用另一个库里的类,只需使用import命令,并指定库名即可。不存在类似于预处理机的宏。(15) Java用包代替了命名空间。由于将所有东西都置入一个类,而且由于采用了一种名为“封装”的机制,它能针对类名进行类似于命名空间...

C++中,宏定义与一般的定义有什么区别?
C\/C++中的宏定义是进行符号常量定义,该定义用于定义一种符号信息用来表示一些特殊的信息,使源代码更具有可读性,同时,也可以提高系统的可移植性。宏定义是在编译时进行解释与替换的,实际运行中的代码是没有宏定义符号的。而一般变量或常量的定义在系统运行中,是有自己的内存空间,访问权限,和生存...

RGBRGB宏(C++\/MFC)
在C++\/MFC编程中,RGBRGB宏是一个实用的工具,它接受三个参数:r, g, b,用于定义颜色。这个宏的工作原理是这样的:首先,r, g, b参数被强制转换为BYTE类型。然后,对g进行左移8位操作,对b进行左移16位操作,以便将它们的值分别扩展到更高的位数。接着,r值左移8位后的g值,以及左移16位后...

从以前其他语言作品移植了个c++程序,结果编译出错,从头到尾was not...
值是0或1。C99中增加了用来定义bool、true以及false宏的头文件夹<stdbool.h>,以便程序员能够编写同时兼容于C与C++的应用程序。在编写新的应用程序时,应该使用 <stdbool.h>头文件中的bool宏。 _Complex and _Imaginary C99标准中定义的复数类型如下:float_Complex; float_Imaginary; double_Complex; double_...

C\/C++编程笔记:获取数组长度
获取数组长度是编程中常见的操作。在C语言中,我们通常使用宏来计算数组长度,例如:定义宏:define GET_ARRAY_LEN(array,len) {len = (sizeof(array) \/ sizeof(array[0]));} 在C++中,我们使用模板技术来定义一个函数,如下:函数定义:template int getArrayLen(T* array) { return (sizeof...

c\/c++运行时代价,为什么函数调用比宏块的运行时代价要大?
但是占用更多的内存。一个函数调用需要执行一系列的汇编指令,这些指令是用于实现函数调用,与函数功能无关,如果直接将函数调用替换成代码可以不用执行这些指令,提高了执行速度。C++的inline关键字只是给编译器一个提示,实际代码是否内联取决于编译器。所以要保证代码一定内联的话,使用宏还是不错的选择。

C++ 宏定义问题,为什么不等于10 而等于1
define P(a,b,c,d,e,f,g...)参数可以随便设,宏定义其实是一个预处理替换,只是你要将对应的参数执行正确的操作。在C++中宏定义一系列简单操作的话可以用inline函数来替换,编译器对inline函数的处理是把接受了参数的inline函数的函数体和目标代码进行替换,有点像宏但比宏安全。例如:#define P(...