控制编译指令在文件从其他文件c++

Controlling compiler directive in file from other file C++

本文关键字:文件 c++ 其他 编译 指令 控制      更新时间:2023-10-16

考虑以下头文件,

    // 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_type .h,

        static const char * STRINGS[] = { 
           "ONE",
           "TWO",
           "THREE"
        };
        const char * getText( int enum ) {
             return STRINGS[enum];
        }

但是对于我的GUI应用程序,我需要完整的文件。我想使用相同的文件为Arduino和GUI,但我怎么能添加编译器指令#define,#ifdef, #ifndef…当我从其他文件(main.cpp)中包含这个文件时,就可以完成这项工作。谢谢。

虽然可以使用一些预处理器杂耍,但正确的解决方案是简单地使用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];
    }

使用前面提到的预处理器杂耍,它最终完成的是相同的逻辑结果,但以更令人困惑和迂回的方式。