C++ Error:C2011: 'struct' type redefinition
2024-09-18 18:43:47
C++ Error:C2011: 'struct' type redefinition
在c语言中,对同一个变量或者函数进行多次声明是不会报错的。所以如果h文件里只是进行了声明工作,即使不使用# ifndef宏定义,一个c文件多次包含同一个h文件也不会报错。
但是在c++语言中,#ifndef的作用域只是在单个文件中。所以如果h文件里定义了全局变量,即使采用#ifndef宏定义,一个c文件包含同一个h文件多次还是会出现全局变量重定义的错误。
使用#ifndef可以避免下面这种错误:如果在h文件中定义了全局变量,一个c文件包含同一个h文件多次,如果不加#ifndef宏定义,会出现变量重复定义的错误;如果加了#ifndef,则不会出现这种错误。
最好把头文件的内容都放在#ifndef和#endif中。不管头文件会不会被多个文件引用,都要加上这个。一般格式是这样的:
#ifndef <标识>
#define <标识>
......
......
#endif
<标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前面加下划线,并把文件名中的“.”也变成下划线,如:stdio.h
#ifndef _STDIO_H
#define _STDIO_H
......
#endif
条件编译有三种形式,理解了其中一种以后碰到了再收即可。(转自网络)
但是在c++语言中,#ifndef的作用域只是在单个文件中。所以如果h文件里定义了全局变量,即使采用#ifndef宏定义,一个c文件包含同一个h文件多次还是会出现全局变量重定义的错误。
使用#ifndef可以避免下面这种错误:如果在h文件中定义了全局变量,一个c文件包含同一个h文件多次,如果不加#ifndef宏定义,会出现变量重复定义的错误;如果加了#ifndef,则不会出现这种错误。
最好把头文件的内容都放在#ifndef和#endif中。不管头文件会不会被多个文件引用,都要加上这个。一般格式是这样的:
#ifndef <标识>
#define <标识>
......
......
#endif
<标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前面加下划线,并把文件名中的“.”也变成下划线,如:stdio.h
#ifndef _STDIO_H
#define _STDIO_H
......
#endif
条件编译有三种形式,理解了其中一种以后碰到了再收即可。(转自网络)
最新文章
- Q: ossfs挂载时如何设置权限?
- iOS一些关于日历的问题
- C#基础---委托的使用
- GridView按钮事件
- PullToRefresh下拉刷新 加载更多 详解 +示例
- 数位dp整理
- JavaScript高级程序设计:第十二章
- myeclipse快捷键(转载)
- nginx中支持.htaccess并禁止php在特定目录无法运行
- 解析Visual C# 7.2中的private protected访问修饰符
- ZedBoard前期准备工作
- 关于R语言中dnorm,pnorm,qnorm,rnorm的用法
- Java -- POI -- 随笔汇总
- Mysql数据库如何自动备份
- STM32F4的sct文件理解
- 【Android自动化】在使用uiautomator框架自动化时,往往有时再运行脚本时发现xxx实例属性不被允许
- ThinkPHP框架知识(比较全的知识)
- Nginx的几个常用配置和技巧
- mongodb常用的查询命令例子
- Python学习之路 (三)爬虫(二)