2015-04-05 133 views
-1

我正在根据Beej's Guide to Network Programming模拟客户端/服务器交互。在我server.c文件的开头,我定义一个与端口号:#在if中定义if-else逻辑

#define PORT "21124" 

不过,我会从这个文件中创建多个服务器和我想改变基于一些if-else逻辑这个常数。在C中有没有一个功能可以轻松实现这一点,如:

if (serverNumber == 1) { 
    #define PORT "21124" 
} 
else if (serverNumber == 2) { 
    #define PORT "12412" 
} 
else { 
    #define PORT "12334" 
} 

这可能是重复的,但我没有在搜索中看到它。我是C noob。

+0

听起来不像是这个东西是一个常量。你可能不应该''定义'它。 – user2357112 2015-04-05 02:42:19

+0

你要么'#if'(不是'if')或者你不想'#define'。可能是后者。 – Leushenko 2015-04-05 02:43:15

+0

我知道这个问题可能并不适用最佳做法,但是,我不明白为什么它会被低估。如果有的话,它可以用来通知将来可能会犯同样错误的人。无论如何,我完全同意每个人的观点。谢谢你们。 – 2015-04-05 02:50:05

回答

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; 
} 
3

“我想改变这个常数”。这听起来不对,是吗?

所以,只需使用一个像int port这样的变量,并用一个简单的if-else语句块或者一个开关来赋值。

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; 
} 
2

#define语句是对C预处理器的指令。因此在if语句中定义它们将不起作用。你可以做的是这样的:

#define ServerNumber 1 
#if ServerNumber == 1 
#define PORT 1234 
#elif ServerNumber == 2 
#define PORT 1235 
#endif 

另外,跳过使用#define一起,并指定为命令行选项,此端口号。