• 欢迎访问,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

#ifndef… 似乎并不能完全阻止重定义,该怎么办

C语言 码拜 2年前 (2017-05-07) 204次浏览
本人想根据教程的内容本人写一个相对全面点的链表,好好练习练习,大致状况是如下这样,本人把结构和相关的一些基础函数都放在了这里,然后宏这里这样写的:

/*Data Structure: data_struct.h*/
#ifndef __DATA_STRUCT_H__
#define __DATA_STRUCT_H__
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#endif
typedef struct student{...

之后本人想单独测试每一个函数能否运行正确,所以单写一个头文件测试:

/*So called unit test: test.h*/
#ifndef __TEST_H__
#define __TEST_H__
#include "data_struct.h"
#endif
int T_struct(){...

然后本人在main里面这样写之后报错:redefination of “struct student…”

#include "data_struct.h"
#include "test.h"
int main()
{
    T_struct();
    return 0;
}

本人的理解是原因是的确读取data_struct.h的时候还未声明__DATA_STRUCT_H__,等到读test.h的时候__TEST_H__也没有声明……所以就又把data_struct.h给读了一遍造成了重复定义一切……
那么本人该怎么回避这种问题呢?

解决方案

10

#endif  写到每个文件的最后

6

预处理是简单的替换,仔细检查替换后的main之前的内容

7

头文件里重定义的限制是以#endif结束的,你定义的结构体在#endif之外

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明#ifndef… 似乎并不能完全阻止重定义,该怎么办
喜欢 (0)
[1034331897@qq.com]
分享 (0)