微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么#ifndef 在复杂的 cmake 项目中不起作用

如何解决为什么#ifndef 在复杂的 cmake 项目中不起作用

我有以下情况,一个复杂的 cmake 项目由应用程序和多个库组成。其中两个依赖于一个公共库。

  • 项目
    • 应用程序(取决于 LibA 和 LibB ...)
    • LibA(取决于 LibC)
    • LibB(取决于 LibC)
    • LibC(通用)
    • ...

LibA 和 LibB 包含来自 LibC 的 types.h 文件。 types.h 已经#ifndef 保护。

#ifndef INC_PROT_TYPES_H__
#define INC_PROT_TYPES_H__ 
bla bla
typedef enum EStatus   
  eOk,eError
}EStatus;
#endif

如果正在编译项目(Visual Studio 2019),则会出现以下错误
错误 G20EDCCE1:重新声明枚举器 'EStatus''

如果 types.h 成为另外的 #pragma once
编译工作没有任何错误

有人可以解释为什么会发生这种情况吗?实际上#ifndef应该和#pragma once一样!

提前致谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。