• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

stm32库函数编写的时候。h文件中stm32f10x.h这

Flipped 2019-03-08 浏览量:766
种经常多次被include不会被认为是重定义吗?

#ifndef __xxx_H

#define __xxx_H

#endif​

这种格式的定义

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 多次被include只是会重复编译某个头文件,浪费时间

    使用这种#ifndef #define #endif的意思就是,如果没进来编译过这个头文件,则往下执行,编译它,并define这个标志,后面再遇到别的源文件有include这个头文件,就不会重新编译

    • 发布于 2019-03-10
    • 举报
    • 评论 2
    • 0
    • 0
Flipped 回复了 chen0000009:那就是说只要头文件中没有定义,只有申明,多次编译是没问题的,只不过浪费编译时间对吗? 回复
chen0000009 回复了 chen0000009:在GCC下面是这样,别的编译器不知道。STM32用的是ARM-GCC编译器 回复

其他答案 数量:4
  • 这是说:每次调用这个头文件,会判断

    1.如果没有定义 __xxx.H  标志

    2.就定义这个标志

    3.添加头文件内容

    4.结束

    如果定义了__xxx.H就直接退出,保证不会多次添加头文件

    • 发布于2019-03-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 你说的这种宏定义就是防止头文件重复引用的,不会重定义。
    • 发布于2019-03-09
    • 举报
    • 评论 0
    • 0
    • 0

  • #ifndef __xxx_H

    #define __xxx_H

    #endif

    首先上面这些内容是条件编译,ifndef就是if not define,也就是未定义__xxx_H这个变量的时候,编译器会自动向下编译,这个时候define这条指令就定义了__xxx_H这个量。再另外一个文件重复包含此文件的时候,编译器发现已经定义过__xxx_H这个量了,编译器在编译的时候就会直接跳过这个文件,需要里面的内容的时候就去前面已经编译过的里面查找,链接。

    • 发布于2019-03-17
    • 举报
    • 评论 0
    • 0
    • 0

  • 多次被include只是被包含,并不是重定义,只会浪费编译时间而不会报错,#ifndef宏定义的作用就是防止防止多次重复编译。

    • 发布于2019-03-17
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

stm32库函数编写的时候。h文件中stm32f10x.h这