C 项目中显示数据的存储位置

问题描述 投票:0回答:1

我正在为 Esp32 编写 C 程序,以在 8x32 LED 矩阵上显示一些图像。 我很难以某种方式存储图像数据,不同的 .cpp 文件可以访问它,但它不会导致包含错误

图像存储在data.h中,例如像这样:

byte A[] = {
0, 0, 0, 0, 0, 0, 0, 0, 
0, 1, 1, 1, 1, 1, 0, 0, 
0, 1, 0, 0, 1, 0, 0, 0, 
0, 1, 1, 1, 1, 1, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0,  };

项目越来越大,所以我想将 main.cpp 与 IR-Control 和 Game-Logic 分开(我还在上面编写了 Snake)。

所以文件夹结构是例如像这样:

  • 包括
    • 数据.h
    • 蛇.h
  • 源代码
    • 主.cpp
    • 蛇.cpp
    • 生命游戏.cpp

问题是,在snake.cpp中,data.h以及game_of_life.cpp和其他文件中都被导入。我还尝试分离 .h 和 .cpp,我有像 extern byte A[32]; 这样的声明;在 data.h 中,以及一个包含上面代码的单独的 data.cpp 。但这也会导致相互矛盾的声明,例如

src/led_matrix_color_data.cpp:2:20: error: conflicting declaration 'uint32_t A_color [48]'
 uint32_t A_color[48] = {
                ^
In file included from src/led_matrix_color_data.cpp:1:
include/led_matrix_color_data.h:5:13: note: previous declaration as 'byte A_color [48]'
 extern byte A_color[48];
             ^~~~~~~

如果我在 data.h 中使用 Include Guards 或 #pragma 一次,这并不重要,因为数据是在那里定义的,所以它们将被忽略或某种形式。


我可以以什么方式存储数据,以便可以轻松地从其他 .cpp 文件(例如全局定义)访问它,但不会遇到包含错误?

谢谢 〜亚历克斯

c data-structures arduino esp32 include-guards
1个回答
0
投票

简单。将数据放入自己的文件中,其他感兴趣的文件可以“看到”。

// data.h
#ifndef DATA_H
#define DATA_H

#ifdef GO_LIVE
#define GLOBAL        // real meat-and-potatoes variables initialised
#else
#define GLOBAL extern // "phantom" declarations of things "out there somewhere"
#endif

GLOBAL byte arrayX[]; // forward declaration

#endif

// data.cpp - a "pure data" source file

#define GO_LIVE  // give me the meat-and-potatoes
#include "data.h"

byte arrayX[ 48 ] = {
    ...
};

// and other "global" data definitions

// main.cpp

#include < standard C or C++ headers >

#include "data.h" // Let me "see" all those "extern" declarations
...
int main( void ) {
...

还有其他方便的方法可以实现此目的,但这将帮助您入门。一旦您的头脑有了这个概念,您就可以根据您的需要在多个源文件中共享(或不共享)数据和函数。编写代码时,请始终记住 KISS 原则 - “Keep It Simple Stupid”。投入巧妙的复杂性(因为你可以)无异于挖掘自己未来的坟墓。

请花更多时间沉浸在 C 语言中。“include”头文件所需的概念与 Python 的“import”不同。

© www.soinside.com 2019 - 2024. All rights reserved.