求助 #define 用法

redong 2012-06-14 02:48:49
struct abc
{
int a;
#define a ((b)->a)
};

中的#define 这句表示什么意思?
...全文
179 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-06-14
  • 打赏
  • 举报
回复
语法糖的味道有甜也有苦。
Spy 2012-06-14
  • 打赏
  • 举报
回复
我来学习的,没有这样写过,看着别扭
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;

struct abc
{
int a;
#define a ((b)->a)
};

int main(int argv,char** argc)
{
abc* b = new abc;
a = 123;
cout<<a<<endl;
return 0;
}

就是申请个名为类型为abc的b指针,然后a这个宏就是直接取int a的值,就是用a取代了b->a。因为b是未声明的,在编译期受#define影响跳过了检查,所以,后来的宏运用解释时要定义声明b这变量
wlnju 2012-06-14
  • 打赏
  • 举报
回复
少用define多用CONST和INLINE
yangkai7758 2012-06-14
  • 打赏
  • 举报
回复
就是在#define之后到结尾或者#undef之间,所有的a都替换成((b)->a)
自己看预编译结果就可以了
比如

int main()
{
int a;
a = 1;
#define a x
a++;
#undef a
a++;
}


gcc -E 结果


int main()
{
int a;
a = 1;

x++;

a++;
}
redong 2012-06-14
  • 打赏
  • 举报
回复
有些大虾就是这样写的,
但是不知是什么意思.

up
求助
y458604244 2012-06-14
  • 打赏
  • 举报
回复
我是新手
typedef_god 2012-06-14
  • 打赏
  • 举报
回复
在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。
  在C或C++语言中,“宏”分为有参数和无参数两种。

另外,宏定义有两点好处:
1.方便程序的修改

2. 提高程序的运行效率
redong 2012-06-14
  • 打赏
  • 举报
回复
编译是可以通过的, 求助.
qixing1115 2012-06-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
struct abc
{
int a;
#define a ((b)->a)
};

中的#define 这句表示什么意思?
[/Quote]
每当遇到a就替换为((b)->a),
不过你上面的有点胡扯了吧,想不出来作用是啥
Olc 2012-06-14
  • 打赏
  • 举报
回复
大哥,虽然我也没试过这样写,不过建议#define还是写在全局吧....
我举个例子吧,反正我也是菜鸟
#include<iostream>
using namespace std;

#define b 100

void main()
{
cout << "b=" << b << endl;
}
你运行一下就有点自己的理解了!

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧