在头文件中,我有一个参数,用于指定控制文件的名称:
#define CTLFILE "server.ini"
这很好用。但现在我想要这样的东西:
如果我在服务器上
#define CTLFILE "server.ini"
否则,如果我在客户端
#define CTLFILE "client.ini"
我该如何实现?
答案 0 :(得分:1)
您可以在启动程序时传递选项:
例如,尝试调用以下程序传递server
或client
:
#include <stdio.h>
#include <string.h>
#define SERVER_FILE "server.ini"
#define CLIENT_FILE "client.ini"
int main (int argc, char *argv[])
{
if (argc<2)
{
fprintf(stderr, "You mast pass type of envirnment\n!");
return 1;
}
if (strcmp(argv[1], "server") == 0)
{
printf ("File selected: %s\n", SERVER_FILE);
}
else if (strcmp(argv[1], "client") == 0)
{
printf ("File selected: %s\n", CLIENT_FILE);
}
else
{
fprintf(stderr, "Not supported environment %s", argv[0]);
return 1;
}
return 0;
}
答案 1 :(得分:0)
您可以使用#ifdef....#endif
对来使用条件编译。
例如,在代码中,将其设置为
#ifdef SERVERSIDE
#define CTLFILE "server.ini"
#else
#define CTLFILE "client.ini"
#endif
然后,在编译时,将-DSERVERSIDE
选项传递给编译器(参考:gcc
)。
答案 2 :(得分:0)
你不能这样做,因为#define和所有#something都是预处理器指令。这意味着在编译之后,所有#something都“消失了”,因此您无法使用预处理器指令以不同方式执行相同的程序。
许多选择:
*)使用不同的#define CTLFILE编译两次程序。 *)您可以开发类似配置文件的内容,以便配置程序的执行。
这需要额外的开发,因为您必须动态更改字符串。这取决于你。
*)只测试“server.ini”或“client.ini”文件的存在。 如果两个文件不同时存在,则工作。