gpt4 book ai didi

c++ - 从其他文件C++控制文件中的编译器指令

转载 作者:行者123 更新时间:2023-11-30 02:28:56 25 4
gpt4 key购买 nike

考虑下面的头文件,

    // filename : packet_types.h
#ifndef _PACKET_TYPES_
#define _PACKET_TYPES_

struct Packet {
enum Type {
typ_ONE,
typ_TWO,
typ_THREE,
};

static const char * STRINGS[] = {
"ONE",
"TWO",
"THREE"
};

const char * getText( int enum ) {
return STRINGS[enum];
}
};
#endif

由于Arduino内存有限,我不想在包含这个文件packet_types.h时包含这部分代码,

        static const char * STRINGS[] = { 
"ONE",
"TWO",
"THREE"
};

const char * getText( int enum ) {
return STRINGS[enum];
}

但是对于我的 GUI 应用程序,我需要完整的文件。我想对 Arduino 和 GUI 使用相同的文件,但是当我从其他文件 (main.cpp) 中包含该文件时,如何添加编译器指令#define、#ifdef、#ifndef...来完成这项工作。谢谢。

最佳答案

虽然可以使用一些预处理器,但正确的解决方案是简单地使用 C++,因为它的目的是使用它。只在头文件中声明这些类成员和方法:

    static const char * STRINGS[];

const char * getText( int enum );

然后在其中一个源文件中定义它们:

    const char * Packet::STRINGS[] = { 
"ONE",
"TWO",
"THREE"
};

const char * Packet::getText( int enum ) {
return STRINGS[enum];
}

通过前面提到的预处理器杂耍,它最终完成的是相同的逻辑结果,但是以一种更加困惑和迂回的方式。

关于c++ - 从其他文件C++控制文件中的编译器指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40203472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com