从其他文件C ++控制文件中的编译器指令
Controlling compiler directive in file from other file C++
考虑以下头文件,
// 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 使用相同的文件,但是当我从其他文件中包含该文件时,如何添加编译器指令#define、#ifdef、#ifndef...来完成这项工作(main.cpp ).谢谢
虽然可以使用一些预处理器,但正确的解决方案是简单地使用 C++,因为它的用途是预期的。在头文件中只声明这些class个成员和方法:
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];
}
通过前面提到的预处理器杂耍,它最终完成的是相同的逻辑结果,但是以更混乱和迂回的方式。
考虑以下头文件,
// 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 使用相同的文件,但是当我从其他文件中包含该文件时,如何添加编译器指令#define、#ifdef、#ifndef...来完成这项工作(main.cpp ).谢谢
虽然可以使用一些预处理器,但正确的解决方案是简单地使用 C++,因为它的用途是预期的。在头文件中只声明这些class个成员和方法:
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];
}
通过前面提到的预处理器杂耍,它最终完成的是相同的逻辑结果,但是以更混乱和迂回的方式。