套头文件html重复,关于C++头文件重复包含的问题
#ifndef PEOPLE_H
#define PEOPLE_H
/* … */
#endif
这样写能够防止头文件被重复包含
在头文件中定义变量不是不规范,而是一种错误。
原因在于
如果在header.h中定义一个变量。
int a = 0;
那么在
file1.c 里如果 #include “header.h”
那么在编译后的file1.o里就会定义一个全局变量a
同样的,
file2.c 里如果 #include “header.h”
那么在编译后的file2.o里就会定义一个全局变量a
在链接阶段,如果file1.o和file2.o链接在一起,变量a的定义就是重复的。
$ cat file1.c file2.c main.c header.h
/* file1.c */
#include "header.h"
/* file2.c */
#include "header.h"
/* main.c */
#include
#include "header.h"
int main(void)
{
printf("a=%d\n", a);
return 0;
}
/* header.h */
#ifndef HEADER_H
#define HEADER_H
int a = 0;
#endif
$ nm file1.o file2.o main.o
file1.o:
0000000000000000 B a
file2.o:
0000000000000000 B a
main.o:
0000000000000000 B a
0000000000000000 T main
U printf
$ gcc -o demo file1.o file2.o main.o
file2.o:(.bss+0x0): multiple definition of `a””
file1.o:(.bss+0x0): first defined here
main.o:(.bss+0x0): multiple definition of `a””
file1.o:(.bss+0x0): first defined here
collect2: ld 返回 1
正确的方法是,在header.h里声明变量,在一个单独的global.c文件里定义变量。
/* file1.c */
#include "header.h"
/* file2.c */
#include "header.h"
/* main.c */
#include
#include "header.h"
int main(void)
{
printf("a=%d\n", a);
return 0;
}
/* header.h */
#ifndef HEADER_H
#define HEADER_H
extern int a;
#endif
/* global.c */
int a = 0;
$ gcc -c file1.c file2.c main.c global.c
$ nm file1.o file2.o main.o global.o
file1.o:
file2.o:
main.o:
U a
0000000000000000 T main
U printf
global.o:
0000000000000000 B a
套头文件html重复,关于C++头文件重复包含的问题相关推荐
- python文件是怎么写_python头文件怎么写
本文主要以python2为例.首先介绍一下Python头文件的编程风格,然后再给大家详细介绍import部分的基本用法.这两个部分就是Python中头文件的组成模块. 编程风格#!/usr/bin/e ...
- php头文件是什么,c++万能头文件是什么?
c++万能头文件是:"#include".头文件是一种包含功能函数.数据接口声明的载体文件:其主要用于保存程序的声明,而定义文件用于保存程序的实现. 在C语言家族程序中,头文件被大 ...
- 基于F28335的Simulink代码生成(四)——如何链接可以访问底层文件的外部源文件和头文件
基于F28335的Simulink代码生成系列文章目录 基于F28335的Simulink代码生成(一)--搞懂模型的运行逻辑 基于F28335的Simulink代码生成(二)--EPWM模块同步设置 ...
- c语言gets函数头文件string.h,string函数头文件
string.h头文件中有什么函数 string.h头文件中的函数: #include //STL 通用算法 #include //STL 位集容器 #include //复数类 #include / ...
- 单片机C语言头文件如何写,51单片机头文件怎么写
本文收集整理关于51单片机头文件怎么写的相关议题,使用内容导航快速到达. 内容导航: Q1:51单片机的头文件究竟该如何写 举个例子先判断是否被定义过,没定义就先定义好,主要就是防止重复包含 #ifn ...
- c语言头文件命名规则,C语言头文件规则.doc
C语言头文件规则.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档所得收 ...
- c语言有algorithm头文件吗,简单谈谈C++ 头文件系列之(algorithm)
简介 algorithm头文件是C++的标准算法库,它主要应用在容器上. 因为所有的算法都是通过迭代器进行操作的,所以算法的运算实际上是和具体的数据结构相分离的 ,也就是说,具有低耦合性. 因此,任何 ...
- linux sockaddr_in头文件,linux网络编程常用头文件
sys/types.h:数据类型定义 sys/socket.h:提供socket函数及数据结构 netinet/in.h:定义数据结构sockaddr_in arpa/inet.h:提供IP地址转换函 ...
- java 输入输出头文件_引入的标准头文件与标准输出以及FOR循环
感觉C学了一遍又一遍,大学学过,工作的时候也学过,奈何一直在弄JAVA,没有怎么用过C,学了就忘,忘了就....算了-- 现在搞音视频开发,又必须弄到这一块了.因此,写点东西回加强记忆.是的,基础本来 ...
最新文章
- vue中过渡动画(类名实现方式)
- 自制快速冒烟测试小工具--基于python多线程(1)
- java学习(103):字符串概述
- 手把手带你搭建Mvp+Dagger架构
- cocos2d-x的未来之旅
- oracle修改用户密码命令_oracle 11g dba用户秘密修改其他用户密码
- 整古专家之恶意批处理命令
- oracle在线重定义表分区,oracle把一张表在线重定义成分区表
- 任意多边形的最大内切圆算法
- python的bytes数据类型
- PAML中文文档/计算分子进化
- 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest:Gym 101667K
- Redis五大数据类型常用命令
- 计算机组成原理:运算器组成实验(.八位串行可控加减法器等)
- 12年来最大飞跃!黄仁勋发布史上最强GPU,世界首个实时光线追踪新一代图灵架构...
- 计算机快捷键m是什么,电脑常用快捷键有哪些
- 一种无需调查船上坞的调查设备安装测量方法和安装测量系统
- 论文解读 | LGD:用于物体检测的标签引导自蒸馏
- Stata如何解决command is unrecognized?
- FckEditor中文配置手册详细说明