首页 > 解决方案 > 强制在嵌入式 C 中最多包含一次

问题描述

我正在开发一个用 ANSI C 编写的嵌入式系统。它的价值在于 Pic32MX/MZ(我们两者都有系统),尽管它不应该是相关的。我也不能使用 C++ 或 Rust。

我编写了代码来控制外围设备。我只想允许 1 个其他文件引用此外围设备。

所以想象我有:

perihperal1.h peripheral1.c my_file1.c myfile2.c

有什么办法可以确保只有 1 个my_file1.cmyfile2.c可以有#include perihperal1.h

我找不到在代码中强制它的方法,我宁愿强制它,而不是仅仅依靠良好的纪律。

编辑:

这样做的目的是我可以将硬件初始化代码与可能与所述外围设备交互的业务逻辑分开。

我想避免设置 UART,并将其包含在某个地方,然后将其也包含在其他地方。可以通过适当的纪律来完成,但在大型团队中经常会发生错误。

标签: cembedded

解决方案


如果有任何正当理由这样做,您可以这样做:

啊:

int unique_include_a = 1;

交流:

#include "a.h"

int a()
{
  return 123;
}

int main()
{
  a();
  return 0;
}

公元前:

#include "a.h"

int b()
{
  return 456;
}

编译和链接:

gcc a.c b.c

链接器应该发出错误:

/usr/bin/ld: /tmp/ccmC6JPZ.o:(.data+0x0): multiple definition of `unique_include_a'; /tmp/ccjvwQrZ.o:(.data+0x0): first defined here
collect2: error: ld returned 1 exit status
    

推荐阅读