【问题标题】:Adding a constant to the name of a variable in C在 C 中为变量的名称添加一个常量
【发布时间】:2017-12-12 09:42:25
【问题描述】:

我想问的是,是否有一种方法可以使用索引(我通过我的程序获得)声明一个变量并将其附加到我的变量名中。一个例子可能是:

char mq_[index] = "Typical string";

char 的名称将是 mq_1mq_2 等等。 有可能吗?

【问题讨论】:

  • 听起来你想要一个数组
  • @user694733 在试图澄清这个问题时,我想我只是把自己弄糊涂了!
  • 这听起来像XY problem。你真正想解决什么问题?
  • 出于某种原因,每个初学者都会在某些时候意识到他们需要根据运行时事件更改变量名称。这样做没有任何意义,因为变量名只是为了程序员的利益而存在,当他们制作程序时。变量名没有其他用途,它们不是可执行文件的一部分。
  • 困惑,你在问什么?

标签: c variables concatenation


【解决方案1】:

没有。

执行 C 代码时(通常)不存在变量名称,因为它们已被编译器删除。

C 通常不是“动态”语言,您无法生成源代码并在运行时对其进行评估,因为典型的运行时环境不包括 C 编译器。

如果您想要一个可以索引的字符串数组,请使用字符串数组和索引:

const char *strings[] = { "Hello", "these", "are", "strings" };
const int index = 2;

puts(strings[index]);

这将打印数组中的第三个元素are。请记住,C 数组的索引从 0 开始。

【讨论】:

    【解决方案2】:

    答案是否定的。除非该变量被声明为extern 以便链接器需要知道它,否则该变量的名称在运行时对程序是完全不可用的(除了调试器可能有一个符号表)。

    如果您尝试为变量添加索引,为什么不使用数组来代替?

    【讨论】:

    • 链接仍然在运行时之前,即使externed 变量名在代码运行时也不会出现。链接器解析引用。
    【解决方案3】:

    您不能动态定义变量名。在你的情况下,你应该使用一个数组。

    char *mq[] = {
        "Typical string",
        "Typical string",
        "Typical string"
    };
    
    printf("%s", mq[1]);
    

    【讨论】:

    • 如果我想把它定义为一个消息队列数组,有可能吗?我试着把一些代码放在一起,但它太疯狂了..
    • 告诉我们您到底想做什么,也许我们可以更轻松地帮助您。例如,如果您要让两个进程通信,那么您可以使用 IPC (users.cs.cf.ac.uk/Dave.Marshall/C/node25.html) 而不是重新发明轮子。
    猜你喜欢
    • 2013-04-28
    • 2019-05-02
    • 2015-08-16
    • 2016-03-27
    • 2013-06-06
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多