gpt4 book ai didi

c - 这是什么定义声明?

转载 作者:太空宇宙 更新时间:2023-11-04 05:22:42 25 4
gpt4 key购买 nike

我在应用程序中看到了这段代码,但我不认识其中的语法。我必须用 C++ 编写等效代码,但这段代码是用 C 编写的。

如何让它在 C++ 应用程序中运行?这种定义的名称是什么?这与定义列表中的每个常量是一样的吗?

/*! Object types */
#define F_ENUM(x, y) x = y,
#define F_SWITCH(x, y) case x: return ( #x );

#define OB_LIST(f) \
f(T0, 0) \ //this declaration has no storage class or type specifier
//identifier "T0" is undefined
f(T1, 1) \ //expected a ")"
//unrecognized token
//expected a ";"
f(T2, 2) \
f(T3, 3) \
f(T4, 4) \
f(T5, 5)

enum mxt_object_type {
OB_LIST(F_ENUM)
};

此外,当我在 C++ 编译器中编译时,出现如下错误:

this declaration has no storage class or type specifier 
identifier "T0" is undefined
expected a ")"
unrecognized token
expected a ";"

它们在代码上有标记。这些错误是什么意思?

最佳答案

当你想要查看处理后的结果时,只需要求查看它,使用 gcc/g++ 选项是 -E,如果我对你的代码进行操作,结果是:

pi@raspberrypi:/tmp $ gcc -E d.c
# 1 "d.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "d.c"
# 13 "d.c"
enum mxt_object_type {
T0 = 0, T1 = 1, T2 = 2, T3 = 3, T4 = 4, T5 = 5,
};

当然这里没有使用F_SWITCH

i have to make an equivalent in C++ but this code is in C

你无事可做,在C++中也是如此

这些宏是针对预处理器的,而不是针对那些看到我在开头显示的结果的 C 或 C++ 本身

C++ 编译示例:

pi@raspberrypi:/tmp $ cat d.cc
/*! Object types */
#define F_ENUM(x, y) x = y,
#define F_SWITCH(x, y) case x: return ( #x );

#define OB_LIST(f) \
f(T0, 0) \
f(T1, 1) \
f(T2, 2) \
f(T3, 3) \
f(T4, 4) \
f(T5, 5)

enum mxt_object_type {
OB_LIST(F_ENUM)
};
pi@raspberrypi:/tmp $ g++ -c -pedantic -Wall d.cc
pi@raspberrypi:/tmp $

工作原理:

  • 首先以 OB_LIST(F_ENUM) OB_LIST 形式扩展生成 F_ENUM(T0, 0) F_ENUM(T1, 1) F_ENUM(T2, 2) F_ENUM(T3, 3) F_ENUM(T4, 4) F_ENUM(T5, 5)
  • 然后每个 F_ENUM 被扩展产生最终结果 T0 = 0, T1 = 1, T2 = 2, T3 = 3, T4 = 4, T5 = 5,

F_SWITCH 的经典用法:

const char * nameIt(mxt_object_type v)
{
switch (v) {
OB_LIST(F_SWITCH)
default:
return "unknown";
}
}

产生:

const char * nameIt(mxt_object_type v)
{
switch (v) {
case T0: return ( "T0" ); case T1: return ( "T1" ); case T2: return ( "T2" ); case T3: return ( "T3" ); case T4: return ( "T4" ); case T5: return ( "T5" );
default:
return "unknown";
}
}

"T0" 这样的字符串是由 #x 生成的,在用它的值替换之后将 x 放在文字字符串中 p>

关于c - 这是什么定义声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54536898/

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