我正在根据Beej's Guide to Network Programming模拟客户端/服务器交互。在我的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
菜鸟。
答案 0 :(得分:3)
"我想改变这个常数"。这听起来不对,是吗?
因此,只需使用类似int port
的变量,并使用简单的if-else语句块或开关分配其值。
答案 1 :(得分:2)
您不应以这种方式使用#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;
}
答案 2 :(得分:2)
你无法做正在尝试的事情。
#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;
}
答案 3 :(得分:2)
#define
语句是对C预处理器的指令。因此,在if
语句中定义它们不会起作用。你能做的就是这样:
#define ServerNumber 1
#if ServerNumber == 1
#define PORT 1234
#elif ServerNumber == 2
#define PORT 1235
#endif
或者,跳过同时使用#define
all并将此端口号指定为命令行选项。