假设有三个文件

node.h //定义节点
list.h //对链表的操作函数
test.c //测试函数
包含关系如下:
list.h中
#include "node.h"
test.c中
#include "list.h"
#include "node.h"
#include ... 省略其它必要的头文件
使用命令编译
$gcc -o test test.c
编译时,会出现错误:XXX重定义
为什么呢?
1)test.c中包含了node.h,因为node.h是定义结构的文件,而且已经被list.h包含了,所以这里node.h会预编译两次,出现重定义!
所以,可以去掉test.c中的头文件node.h即可
2)修改node.h,避免重定义,这种方法也是推荐的方法
#ifndef _NODE
#define _NODE
typedef struct node{
int x;
struct node *next;
}NODE;
#endif
使用一个标记变量_NODE来表示NODE结构已经被定义了,将定义过程包含在#ifndef~#endif中,这样,不管包含多少次node.h文件,都不会出现重定义。
当然,这不仅仅限于结构的定义。

C语言中重定义 错误相关推荐

  1. c语言错误重定义,C语言的重定义错误求解

    追问 那如果要用到全局变量,要把它写在C文件中? 那全局变量的主要作用其实就是跨文件作用域来传递一些东西,写在C文件中,不太好在别的文件中引用吧. 用的时候写extern进去? 感觉全局变量在C里用 ...

  2. 如何用C语言改变宏定义的大小,C语言中宏定义使用的小细节

    C语言中宏定义使用的小细节 #pragma#pragma 预处理指令详解 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#p ...

  3. C/C++编程笔记:浅析 C 语言中宏定义的使用,知识点全解

    宏定义是用一个标识符来表示一个字符串,在宏调用中将用该字符串代替宏名.给程序员提供了便利,使程序更加清晰,便于阅读和理解,进一步提高了程序的运行效率,对于嵌入式系统而言,为了能达到性能要求,宏是一种很 ...

  4. C语言中如何定义全局变量

    C语言中如何定义全局变量 C/C++ 2010-09-06 13:01:39 阅读590 评论0   字号:大中小 订阅 众所周知,全局变量在被定义后,系统会为全局变量分配内存并且它还可以被其他模块通 ...

  5. c语言中宏定义的字符替换#define M(x,y,z) x*y+z

    C语言中宏定义的字符替换问题 例子: 在c语言中定义如下宏 #define M(x,y,z) x*y+z 给定如下程序 #include<stdio.h> #include<stdl ...

  6. c语言变量定义位置区别,C语言中变量定义的位置(C89和C99的区别)

    C语言中变量定义的位置(C89和C99的区别) 在C++和JAVA中,按照语法,我们可以把变量定义在任何位置,所以很多人习惯了"哪里使用哪里定义"的这种做法,所以当用C语言进行编程 ...

  7. C++中重定义,重载,重写

    重定义 C++中的重定义指在同一作用域内定义了同名的函数.变量或类型.重定义是编译器无法处理的语法错误,将导致程序无法编译通过. 例如,在同一作用域内定义了两个函数名相同.参数列表相同的函数,就会产生 ...

  8. C语言中字符串定义与文字常量区

    C语言中字符串定义与文字常量区 C语言的内存组织方式1>代码区,存放可执行代码2>全局存储区,存放所有全局变量和静态变量3>文字常量区,常量字符串4>堆区,malloc,new ...

  9. C语言中宏定义的使用

    1. 引言 1.1 宏定义的基本语法 1.2 宏定义的优点 1.3 宏定义的缺点 1.4 宏还是函数 2 使用宏时的注意点 2.1 算符优先级问题 2.2 分号吞噬问题 2.3 宏参数重复调用 2.4 ...

最新文章

  1. window 杀死已开任务启命令
  2. c语言防止缓冲区数据作为有效字符被读入
  3. ABP Framework 研习社经验总结(6.28-7.2)
  4. 黄聪:wordpress博客用Slimbox2实现lightbox效果(免插件)(转)
  5. 公司想建个FTP文件服务器,自己折腾把一台电脑做成文件服务器了,但是考虑稳定性放弃,计划买个有哪些建议?
  6. 深入理解Tomcat系列之五:Context容器和Wrapper容器
  7. pyqt5多进程 python_Python 多进程大全
  8. 连载8:时域信号相乘相当于频域卷积
  9. 关闭eslink:报错:Unexpected tab character no-tabs
  10. Android 监听 摇杆,Android虚拟摇杆 摇杆 方向控制
  11. tableau 常用函数整理
  12. python arp断网攻击_arp断网攻击,小编教你arp断网攻击怎么解决
  13. 今日头条 2018 AI Camp 视频面试
  14. 信度效度难度区分度是什么意思_【辨析·干货】“效度、信度、难度和区分度”一起学...
  15. [点分树] BZOJ 4372: 烁烁的游戏
  16. 【坐在马桶上看算法】算法2:邻居好说话:冒泡排序
  17. matlab石碑提取,罗塞塔石碑-高尔夫代码:Tic Tac T
  18. Safari 手机浏览器无法下载的问题
  19. 不用找,你想要的游戏3d纹理图片素材都在这里
  20. 基于Luca-Kanade光流算法的图像运动场提取matlab仿真

热门文章

  1. php体验课心得体会,【授课心得】_授课心得体会(精选5篇)
  2. 浅谈Excel文件解析
  3. Optional int parameter ‘XXX‘ is present but cannot be translated into a null value问题
  4. 小区IP网络广播背景系统解决方案-基于局域网、专网或广域网传输
  5. 油猴脚本+钉钉机器人实现实时合并提醒
  6. 求由一种特殊递推关系决定的数列通项
  7. c语言ecit,[转载]c# linq的一些运用 – EcitGis – 博客园
  8. openGauss存储技术(三)——列存储引擎
  9. c语言通讯录设计与实现需求概述,个人通讯录的设计与实现.doc
  10. Vue学习之旅-02