C++函数里面可以使用宏定义吗

供稿:hz-xin.com     日期:2025-01-13
C++ 宏定义的函数如何调用

带参数的宏定义,也称为宏函数,即宏定义的函数。
调用方法和普通函数是相同的,即
函数名(参数列表)
的方式进行调用。
与普通函数不同的是:
1 宏定义中,不存在参数类型,所以也不会对调用时的参数做类型检查,需要编程者自行注意。
2 宏定义不会产生栈操作,而是直接将宏函数内容替换到调用位置。所以对于参数要格外小心。

在C++中,内联函数(inline)的出现就是取代宏函数的,相对宏函数,内联函数更不容易出错,也更容易理解。所以在C++中,宏函数已经用的很少了。

#include
#define PRINT fun()
void fun()
{
printf("hello world
");
}
//////////////////////
main()
{ PRINT;
}


//////////////////////////////////

#define N 10

这后面不要加分号

函数里可以使用宏,但一般写程序都放在前面。如果放在函数里则宏的作用域较小,在定义宏之前不能使用该宏,而且改变该宏的值时不容易找到。
例:
#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 a)
{
#define AAA 5;
a=AAA;
return a;
}
结果为:
2
5
所以说在函数中可以使用宏。
再如:
#include "iostream.h"
int Fun(int a);//函数声明
int main()
{
int a;
a=2;
cout<<a<<endl;
a=AAA;//****在该处使用宏提示没有定义********
cout<<a<<endl;
return 0;
}
int Fun(int a)
{
#define AAA 5;
a=AAA;
return a;
}
所以函数中定义的宏的作用域较小,只有在定义的后面可以使用。
总结:建议写程序时把用到的宏都放到前面,而且该变宏的值时也很容易找到。

一般都是在函数外定义,中函数里定义作用域小,有可能会重名,不提倡

C++中不允许使用宏定义的方法定义符号常量,只能使用关键字const来定义...
解决这个问题的方案很简单:不用预处理宏,定义一个常量:const double ASPECT_RATIO = 1.653;这种方法很有效。但有两个特殊情况要注意。首先,定义指针常量时会有点不同。因为常量定义一般是放在头文件中(许多源文件会包含它),除了指针所指的类型要定义成const外,重要的是指针也经常要定义成const。

C++里如何使用宏定义或其它技巧使用FOR循环简化代码。
1. 宏定义并没有提供这样的功能。2. 使用for循环是不可能的,这表示要在运行时把一个字符串转成变量,而程序经过编译之后已经变成了汇编语言,变量已经变成了一个个内存地址,他不可能认识这个变量名了。建议在定义指针时使用指针数组,这样就可以循环调用了。比如:CA* p[100];for ( int i = 0;...

vc++编程题 用宏定义来编程两个整数求余
然后你在编的是侯只要给出a b的值。就可以了。

c++ 头文件中加入 #ifnodef #define #engif 有什么用
define:这个宏定义就是使用一个命名来替代另一个。比如#define age 5 那么,在程序中,填入age,在预编译的时候,编译器就会自动将age替换成5,注意,这个是直接替换,所以如果#define X 3+1,那么在程序中输入5*X,编译器就会将其替换成5*3+1,这种情况一般会这样定义#define X (3+1)ifdef...

我想知道c语言里面怎么区分函数与宏
同样道理,这个宏定义的外层括号也是不能省的。若函数中是宏替换为 ++MAX(a,b),则宏展开就成了 ++(a)>(b)?(a):(b),运算优先级也是错了。(4)若函数参数为表达式,则普通函数的调用与函数式宏定义的替换过程是不一样的。普通函数调用时先求实参表达式的值再传给形参,如果实参表达式有Side...

C++函数重载!1:调用MIN函数2定义char,int,float,long数组,3,用MIN函数...
在上面那位的基础改了一下,数组不能动态分配,可以直接用宏定义其实,在WinXP SP3 + VS 2005 express下通过 include <iostream> using namespace std;define N 10 template <class T> T min(T *num,int n){ T k = *num;for (int i = 1;i < n;i ++) { num ++;if (*num < k)...

C++ 宏定义问题,为什么不等于10 而等于1
也可以使用inline函数如:inline void func(const int& x,const int& y){ int array[x];cout << array[y];} 但有时候使用宏定义却很危险如:define P(x,y) (x) > (y) ? (x):(y)int a = 3;int b;对于这样的语句b = P(++a,3)最后b却等于5,这并不是你想要的结果,这个时候...

c++中如何在调用函数时能将该 实参名 作为字符串调入并存入set<string>...
C++: Variant Length Argument List 有时候我们希望定义参数列表不确定的宏(Macro),比如打印Debug信息的宏。C\/C++支持变长参数列表的函数,但是对于宏定义,有点小问题。C99标准(注意这是C语言标准,不是C++标准)有一个__VA_ARGS__可以用在宏定义中表示参数列表中的“...”部分,比如我们可以这...

内联函数与宏的区别(C++)
而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。你可以象调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。内联函数与带参数的宏定义进行下比较,它们的代码效率是一样,但是内联欢函数要优于宏定义,因为内...

C++宏位于内存的什么位置
宏表达式:由表达室内容确定。宏字符串:在使用时可能占用内存,占用全局常量数据空间。宏连接就是代码或局部代码串,使用时可能产生代码,占用代码空间。一种是带参数的宏,可称宏函数, 就是一些代码,如 define max(x,y) ((x)>(y)?(x):(y))define inc3_c(x,y,z) {x++;y++;z+...