#define TYPE char *
if TYPE is char *
do A
if TYPE is int
do B
有没有一个例子如何做这些事情?
答案 0 :(得分:2)
C预处理器MACROS操作文本,因此基本上没有类型,所以不,你不能这样做。
答案 1 :(得分:1)
您可以将另一个符号与其相关联:
#define TYPE char *
#define TYPE_IS_CHAR_STAR
#ifdef TYPE_IS_CHAR_STAR
...
#endif
您只需手动保持一致。
请注意,这是一个危险的宏;你应该使用typedef
代替。随着宏:
TYPE x, y;
x
是指针,但y
不是。
答案 2 :(得分:0)
通过定义另一个宏以及类型,并使用#ifdef
等与其他宏一起使用,可以获得类似的效果。例如:
#define TYPE char *
#define TYPE_IS_PCHAR 1
......然后......>
#ifdef TYPE_IS_PCHAR
do A
#endif
#ifdef TYPE_IS_INT
do B
#endif
这不是一回事,但它仍然让你在那里。
答案 3 :(得分:0)
不容易。你可以这样做:
#define TYPE_IS_CHARPTR
//#define TYPE_IS_INT
#ifdef TYPE_IS_CHARPTR
do A
#endif
#ifdef TYPE_IS_INT
do B
#endif
但你真的应该尽量减少使用预处理器来处理棘手的事情(除了简单的变量之外)。
使用枚举常量和内联函数,现在几乎不需要这样的用法。
答案 4 :(得分:0)
如果您只使用基本类型(因为它们只是字符串 - 请参阅Mitch的答案)。但是一旦你尝试使用指针,它将不再起作用 - 星号抛出预处理器进行循环:
[holt@Michaela ~]$ gcc test.c
test.c:3:10: error: operator '*' has no right operand
但是如果你想根据不同的类型做不同的事情,我将不得不建议切换到C ++并使用templates和template specialization。不情愿,因为模板语法难以置信,但你应该能够做任何你想做的事。
希望有所帮助!