如何根据我们称之为程序的环境初始化参数?

时间:2017-01-12 09:36:04

标签: c++ c

在头文件中,我有一个参数,用于指定控制文件的名称:

#define CTLFILE "server.ini"

这很好用。但现在我想要这样的东西:

如果我在服务器上

#define CTLFILE "server.ini"

否则,如果我在客户端

#define CTLFILE "client.ini"

我该如何实现?

3 个答案:

答案 0 :(得分:1)

您可以在启动程序时传递选项:

例如,尝试调用以下程序传递serverclient

#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”文件的存在。 如果两个文件不同时存在,则工作。