注册 登录
编程论坛 C语言论坛

有关宏的问题

卡卡3315 发布于 2020-03-28 10:07, 2175 次点击
#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编辑过]

6 回复
#2
forever742020-03-28 10:52
如果项目里另外的源文件也包含这个头文件,就会在第一行发现这个宏已经定义过了,从而忽略剩下的所有行,从而防止重复声明。
那么核心问题是这个宏有没有被定义过,而不是定义为什么。
因此第二行的语法是没有后续“参数”的,只要表达定义过就足够了。
#3
lin51616782020-03-28 10:56
宏语法没要求 必须写第三段
如果你无法理解只有两段组成的宏 你可以等效的理解为第三段是空
#4
forever742020-03-28 11:05
就好象一个女生远远看上你有点顺眼的时候,那她应该首先关心的是你有没有女友,而不是你的女友是谁这种事
#5
飞天大烧卖2020-03-28 11:59
回复 4楼 forever74
很生动
#6
飞天大烧卖2020-03-28 12:18
回复 楼主 卡卡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
#7
叶纤2020-03-28 13:02
标头防护,防止名称冲突
1