#define 在 C 中使用 if-else 逻辑
#define with if-else logic in C
我正在根据 Beej's Guide to Network Programming 模拟 client/server 交互。在我的 server.c
文件的开头,我定义了一个端口号:
#define PORT "21124"
但是,我将从该文件创建多个服务器,并且我想根据一些 if-else 逻辑更改此常量。 C 中是否有一个功能可以轻松完成此操作,例如:
if (serverNumber == 1) {
#define PORT "21124"
}
else if (serverNumber == 2) {
#define PORT "12412"
}
else {
#define PORT "12334"
}
这可能是重复的,但我没有在搜索中看到它。我是 C
菜鸟。
"I would like to change this constant"。听起来不太对吧?
因此,只需使用像 int port
这样的变量,并使用简单的 if-else 语句块或开关为其赋值。
您不应以这种方式使用 #define
。使用 #if
、#elif
和 #else
的预处理器存在 if-else 逻辑,但您必须意识到这实际上是对应用程序进行硬编码。
你可以这样做,但我也不推荐这样做。只需使用变量或 const
代替,因为类型安全性更好——不需要预处理器:
#define PORT_1 "21124"
#define PORT_2 "12412"
#define PORT_3 "12334"
if (serverNumber == 1) {
port = PORT_1;
}
else if (serverNumber == 2) {
port = PORT_2;
}
else {
port = PORT_3;
}
你不能做正在尝试的事情。
#define
语句在编译时处理。根据 运行 时间的变量值使用不同的 #define
语句没有意义。
你能做的最好的是:
#define PORT_1 "21124"
#define PORT_2 "12412"
#define PORT_3 "12334"
使用变量 PORT
并适当地设置它的值。
if (serverNumber == 1) {
PORT = PORT_1;
}
else if (serverNumber == 2) {
PORT = PORT_2;
}
else {
PORT = PORT_3;
}
#define
语句是对 C 预处理器的指令。所以在 if
语句中定义它们是行不通的。你可以做的是这样的:
#define ServerNumber 1
#if ServerNumber == 1
#define PORT 1234
#elif ServerNumber == 2
#define PORT 1235
#endif
或者,跳过一起使用 #define
并将此端口号指定为命令行选项。
我正在根据 Beej's Guide to Network Programming 模拟 client/server 交互。在我的 server.c
文件的开头,我定义了一个端口号:
#define PORT "21124"
但是,我将从该文件创建多个服务器,并且我想根据一些 if-else 逻辑更改此常量。 C 中是否有一个功能可以轻松完成此操作,例如:
if (serverNumber == 1) {
#define PORT "21124"
}
else if (serverNumber == 2) {
#define PORT "12412"
}
else {
#define PORT "12334"
}
这可能是重复的,但我没有在搜索中看到它。我是 C
菜鸟。
"I would like to change this constant"。听起来不太对吧?
因此,只需使用像 int port
这样的变量,并使用简单的 if-else 语句块或开关为其赋值。
您不应以这种方式使用 #define
。使用 #if
、#elif
和 #else
的预处理器存在 if-else 逻辑,但您必须意识到这实际上是对应用程序进行硬编码。
你可以这样做,但我也不推荐这样做。只需使用变量或 const
代替,因为类型安全性更好——不需要预处理器:
#define PORT_1 "21124"
#define PORT_2 "12412"
#define PORT_3 "12334"
if (serverNumber == 1) {
port = PORT_1;
}
else if (serverNumber == 2) {
port = PORT_2;
}
else {
port = PORT_3;
}
你不能做正在尝试的事情。
#define
语句在编译时处理。根据 运行 时间的变量值使用不同的 #define
语句没有意义。
你能做的最好的是:
#define PORT_1 "21124"
#define PORT_2 "12412"
#define PORT_3 "12334"
使用变量 PORT
并适当地设置它的值。
if (serverNumber == 1) {
PORT = PORT_1;
}
else if (serverNumber == 2) {
PORT = PORT_2;
}
else {
PORT = PORT_3;
}
#define
语句是对 C 预处理器的指令。所以在 if
语句中定义它们是行不通的。你可以做的是这样的:
#define ServerNumber 1
#if ServerNumber == 1
#define PORT 1234
#elif ServerNumber == 2
#define PORT 1235
#endif
或者,跳过一起使用 #define
并将此端口号指定为命令行选项。