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语言头文件中定义结构体的问题的主要内容,如果未能解决你的问题,请参考以下文章

C语言编程 结构体让多个CPP使用

C语言 文件操作的头文件

c语言中2个结构体的头指针相等,会不会把其中一个覆盖了

Keil中C语言模块化编程时全局变量、结构体处理细节

c语言中,一个文件中的函数想用另一个文件中定义的结构体怎么办,用extern好像解决不了

C如何防止头文件中的结构体被重复定义?