#define在C中使用if-else逻辑

时间:2015-04-05 02:38:41

标签: c if-statement constants c-preprocessor

我正在根据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菜鸟。

4 个答案:

答案 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并将此端口号指定为命令行选项。