您的位置:首页 > 编程语言 > C语言/C++

关于C/C++中 Class, Struct, enum的定义声明位置

2010-09-06 15:52 477 查看
struct 和 enum定义的数据类型的作用域是本文件中。所以:

a. 当一个struct的数据类型定义定义在.h文件中,.h文件被多个.c包含,这些.c文件又一起连接时,不会出现数据类型重复定义的错误。但是如果这个.h文件在同一个.c中被多次展开,就出现了数据类型重复定义的问题。

b. struct 数据类型的定义,应该定义在.h文件中。也可以定义在.c中,在.h中做声明。

c. struct数据类型的定义和struct实例的定义是不同的,实例的定义的作用范围是整个编译对象。实例的定义一定要定义在.c中,如果外部有引用,在.h中作声明。

下面是CSDN上的一个讨论:

类,其实是数据类型的定义,和struct、enum的定义没有区别,
1、类型定义和对象定义是有区别的:
类型定义的作用范围和enum的定义是一样,类似const对象的默认作用域,文件内部作用域,所以即使被多个.c文件包含进去也不会发生类类型重定义,除非被一个c文件多次展开,多次展开的情况才用#ifndef _H_ #define _H_头文件哨兵避免,
但是非const对象定义就不同了,默认是extern作用域,所以被多个c文件包含就会发生对象重定义,用不用头文件哨兵都一样,这一点都没有回答到。
2、class A
{
....
};
是类型定义,也同时进行了一个类型声明,所以在很多书上直接说声明一个类,稍微不严谨;
class A;才是单纯类型声明,声明只是说明一个名字在此处用到,所以可以重复声明。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: