C语言头文件中定义结构体的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言头文件中定义结构体的问题相关的知识,希望对你有一定的参考价值。
编译通过
编译报错:
error C2065: 'STU' : undeclared identifier
未定义? 头文件中定义了为什么没用……
C语言程序设计中,为防止头文件在同一编译单元被重复引用,常引入#ifndef宏来进行保护,如:头文件my_head.h
#ifndef _MY_HEAD_H_ //如果没有定义宏_MY_HEAD_H_#define _MY_HEAD_H_ //则,定义该宏名
//以下是被保护的代码区
//进行相应的全局变量和结构体类型定义
typedef struct stu
int a;
int b;
STU ;
#endif //宏判断结束
这样,当整个代码中,多次引用这个my_head.h时,只有一次是生效的,系统编译时,如果检查宏_MY_HEAD_H_ 已经定义,就不会再进入被保护的代码区了。
PS: 宏名,一般是与头文件名相同,只是把字母全大写,前后加上下划线(_)
参考技术A 头文件由三部分内容组成:(1)头文件开头处的版权和版本声明。
(2)预处理块。
(3)函数和类结构声明等。
它的作用:
(1)通过头文件来调用库功能。
(2)头文件能加强类型安全检查。
用 #include <filename.h> 格式来引用标准库的头文件(编译器将从标准库目录开始搜索),到include子目录下搜索给出的文件,并把它嵌入到当前文件中 。
用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索),在当前目录中进行搜索,如果找不到,再按标准方式进行搜索 ,这种方式适用于用户自己建立的头文件。
需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义文件的头部。为便于管理,可以把不同模块的常量集中存放在一个公共的头文件中
参考技术B 是ifndef把本回答被提问者采纳
Keil中C语言模块化编程时全局变量、结构体处理细节
参考技术A 1、若结构体类型只需要在某个c文件中使用,那么就在相应c文件里定义该结构体即可。2、若结构体类型要在多个.c文件中使用,那么就应该在.h文件中定义该结构体,再在要用它的文件中包含结构体定义所在的.h文件即可。
或者在头文件中定义结构体类型
typedef struct
int cmd_type;
float param1;
float param2;
command_message_t;
在.c文件中定义结构体变量,再在.h文件中声明结构体变量,
以上是关于C语言头文件中定义结构体的问题的主要内容,如果未能解决你的问题,请参考以下文章