作为结构调用的一部分,如何在一行中组成一个变量名?
How to compose a variable name in one line, as part of struct call?
我完全不知道我想要完成的事情是否可行。我是 C 的新手。
我有一个包含指向另一个结构的指针的结构,它包含另一个指向另一个结构的指针。
最后一个结构包含两个指向名为 "leadingToCw" 和 "leadingToCcW" 的结构的指针。我还有一个全局字符串变量 dir,它可以在任何时间点从 Cw 更改为 Ccw。它看起来像这样:
#define concat(a,b) a##b
String dir = "Ccw"; // or "Cw"
struct Intersection {
struct Sector *incoming;
}
struct Sector {
struct Sector *leadingToCcw;
struct Sector *leadingToCw;
};
现在我想要的是根据 "dir" 字符串调用 leadingToCcw 或 leadingToCw,以便输出如下所示:
Intersection->incoming->leadingToCcw
我试过这样的事情:
Intersection->incomming->(dir == "Ccw" ? concat(leadingTo, Ccw) : concat(leadingTo, Cw))
但我得到这个错误:
error: expected unqualified-id before '(' token
我不知道它是否值得一提,但它是针对 Arduino 项目的:-)
希望有人能帮帮我,或者踢我屁股告诉我不可行!
为什么不使用通常的条件?
dir == "Ccw"? Intersection->incomming->leadingToCcw : Intersection->incomming->leadingToCw
在 C 中没有像 String
这样的东西。您可以使用 char *
代替
char *dir = "Ccw";
if (strcmp(dir, "Ccw") == 0)
{
// Do whatever you want to do with Intersection->incomming->leadingToCcw
}
else if (strcmp(dir, "Cw") == 0)
{
// Do whatever you want to do with Intersection->incomming->leadingToCw
}
我完全不知道我想要完成的事情是否可行。我是 C 的新手。
我有一个包含指向另一个结构的指针的结构,它包含另一个指向另一个结构的指针。 最后一个结构包含两个指向名为 "leadingToCw" 和 "leadingToCcW" 的结构的指针。我还有一个全局字符串变量 dir,它可以在任何时间点从 Cw 更改为 Ccw。它看起来像这样:
#define concat(a,b) a##b
String dir = "Ccw"; // or "Cw"
struct Intersection {
struct Sector *incoming;
}
struct Sector {
struct Sector *leadingToCcw;
struct Sector *leadingToCw;
};
现在我想要的是根据 "dir" 字符串调用 leadingToCcw 或 leadingToCw,以便输出如下所示:
Intersection->incoming->leadingToCcw
我试过这样的事情:
Intersection->incomming->(dir == "Ccw" ? concat(leadingTo, Ccw) : concat(leadingTo, Cw))
但我得到这个错误:
error: expected unqualified-id before '(' token
我不知道它是否值得一提,但它是针对 Arduino 项目的:-) 希望有人能帮帮我,或者踢我屁股告诉我不可行!
为什么不使用通常的条件?
dir == "Ccw"? Intersection->incomming->leadingToCcw : Intersection->incomming->leadingToCw
在 C 中没有像 String
这样的东西。您可以使用 char *
代替
char *dir = "Ccw";
if (strcmp(dir, "Ccw") == 0)
{
// Do whatever you want to do with Intersection->incomming->leadingToCcw
}
else if (strcmp(dir, "Cw") == 0)
{
// Do whatever you want to do with Intersection->incomming->leadingToCw
}