| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1868 人关注过本帖
标题:有关宏的问题
只看楼主 加入收藏
卡卡3315
Rank: 1
等 级:新手上路
帖 子:11
专家分:8
注 册:2019-6-24
结帖率:100%
收藏
已结贴  问题点数:18 回复次数:6 
有关宏的问题
#ifndef _STUDENT_H_
#define _STUDENT_H_

#define STR_LEN 20
typedef struct _student
{
    char name[STR_LEN];
    int gender;
    int age;
}Student;

#endif

这个程序里面第二行的  #define _STUDENT_H_  不是很理解。这段程序被另外一个程序用include引用了,我知道ifndef , define 和 endif 连起来是防止重复声明,但是这个宏为什么不带参数,还是说下面的这段代码全部都是参数?既然include已经是把这段内容全部引用了,为什么还需要宏呢?

[此贴子已经被作者于2020-3-28 10:12编辑过]

搜索更多相关主题的帖子: int include  define 宏的 
2020-03-28 10:07
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1704
专家分:4339
注 册:2007-12-27
收藏
得分:5 
如果项目里另外的源文件也包含这个头文件,就会在第一行发现这个宏已经定义过了,从而忽略剩下的所有行,从而防止重复声明。
那么核心问题是这个宏有没有被定义过,而不是定义为什么。
因此第二行的语法是没有后续“参数”的,只要表达定义过就足够了。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-03-28 10:52
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:5 
宏语法没要求 必须写第三段
如果你无法理解只有两段组成的宏 你可以等效的理解为第三段是空

https://zh.
2020-03-28 10:56
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1704
专家分:4339
注 册:2007-12-27
收藏
得分:0 
就好象一个女生远远看上你有点顺眼的时候,那她应该首先关心的是你有没有女友,而不是你的女友是谁这种事

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-03-28 11:05
飞天大烧卖
Rank: 2
等 级:论坛游民
帖 子:45
专家分:27
注 册:2020-3-26
收藏
得分:5 
回复 4楼 forever74
很生动
2020-03-28 11:59
飞天大烧卖
Rank: 2
等 级:论坛游民
帖 子:45
专家分:27
注 册:2020-3-26
收藏
得分:0 
回复 楼主 卡卡3315
比如说这个例子:在头文件中定义全局变量
#ifndef _0S_UCOSII_H_
#define _OS_UCOSII_H_

#ifdef OS_GLBAL
#define OS_EXT
#else
#define OS_EXT extern

OS_EXT int g_val;
#endif
假如包含了这个头文件,并且没定义OS_GLBAL,OS_EXT才会宏定义为extern
2020-03-28 12:18
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:5 
标头防护,防止名称冲突

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-28 13:02
快速回复:有关宏的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048642 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved