【问题标题】:selectable look-up table using pre-processor define使用预处理器定义的可选查找表
【发布时间】:2018-11-19 16:35:42
【问题描述】:

我有一个 c 程序,它使用在单独的 .c 文件中定义的查找表。

c 程序实际上是在 PIC24H 上运行并使用 MPLAB XC16 编译器编译的。这不是特别相关,只是它为我正在尝试做的事情提供动力。

我想要几个查找表,每个都在自己的 .c 文件中。然后我想使用预处理器来定义将哪个表加载到程序代码中。

我不确定同一个 .c 文件中所有未使用的表是否会占用程序空间,或者编译器是否会忽略它们。

如果所有表格都存储在程序代码中,这将占用宝贵的程序内存。

我主要是在寻找有关实施选择性查找机制的建议。我正在考虑下面的内容,但不确定这实际上是如何工作的。

#define CLEVEL 75 // CLEVEL may be in set {45 60 75}

#if (CLEVEL==45}
#include "clevel45.h"
#elseif (CLEVEL==60}
#include "clevel60.h"
#elseif (CLEVEL==75)
#include "clevel75.h"
#endif

【问题讨论】:

  • 另一种解决方案是将所有三个表放在一个 .c 文件中,并使用预处理器指令来选择表。
  • 如果这些归结为同一个变量,它们绝对不应该在单独的文件中,而应该在一个单独的 .c 文件中。

标签: c embedded c-preprocessor lookup-tables


【解决方案1】:

或者试试这样的:

level.c

#define CLEVEL 75 // CLEVEL may be in set {45 60 75}

#if (CLEVEL==45}
/*
parameter for level 45 ...
*/    

#elseif (CLEVEL==60}
/*
parameter for level 60 ...
*/    

#elseif (CLEVEL==75)
/*
parameter for level 75 ...
*/    

#endif

这样你就没有任何未使用的头文件了,

【讨论】:

    【解决方案2】:

    我不会混合将来不存在的文件,从而创建无用的依赖关系。另一种方式:

    your_cfg_file.h:

    #define CLEVEL75
    

    your_clevel75_file.h:

    #ifdef CLEVEL75
    {your parameters}
    #endif
    

    your_clevel60_file.h:

    #ifdef CLEVEL60
    {your parameters}
    #endif
    

    ...等等...

    【讨论】:

    • 谢谢。我正在按照您描述的方式尝试它,并且我得到了一个未定义的引用错误,即使很明显预编译器会在其中一个 ifdef 上触发。未定义的引用在那些 ifdef 中。
    • 向我们展示您的新代码。你可能错过了什么。
    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多