【问题标题】:Compiler errors when declaring global variables声明全局变量时的编译器错误
【发布时间】:2017-02-03 03:46:49
【问题描述】:

我试图声明一个全局变量,但由于某种原因编译器不喜欢这个。当我已经给出类型时,它没有存储类或说明符。就在一分钟前,这些是本地到主要的,但现在我才意识到我将需要这些全局的,并且由于某种原因它不让我这样做。我希望我的所有函数都能看到这些变量,但我的大多数函数目前不在 main.js 中。所以我希望它们被所有功能共享。

char pa, pb, pc, pd, pe, pf, pg, ph, pi, pj, pk, pl, pm, pn, po;
    pa = 'o';
    pb = pc = pd = pe = pf = pg = ph = pi = pj = pk = pl = pm = pn = po = '+';

【问题讨论】:

  • 您必须在声明点或某种初始化函数中初始化这些变量。您不能只在函数之外编写像 pa = 'o'; 这样的语句。
  • 所有这些全局变量都不会赢得任何设计奖项...使用本地数组并将其传递给您的函数。
  • 赋值排除数组:/
  • 您希望将值分配给char 变量的语句何时执行?
  • 您使用的是哪个编译器?我在 Windows 7 上使用 Qt Creator 作为“C”项目对此进行了测试(请参阅我的回答帖子)。

标签: c variables global


【解决方案1】:

您应该将代码放在这样的 main() 函数中。 我能够在 Windows 7 上编译它。

#include <stdio.h>

/* Declare global variables for this module */
char pa, pb, pc, pd, pe, pf, pg, ph, pi, pj, pk, pl, pm, pn, po;

int main(int argc, char *argv[])
{

    /* Assign your global variables */

    pa = 'o';
    pb = pc = pd = pe = pf = pg = ph = pi = pj = pk = pl = pm = pn = po = '+';
}

【讨论】:

    【解决方案2】:

    您可以在函数之外声明和分配一个(单个)变量。 将您的声明变成单个声明:

    #include <stdio.h>
    
    char  pa = 'o';
    char  pb = '+';
    char  pc = '+';
    /* many others, omitted for brevity */
    
    int main() {
      printf("%c, %c", pa, pb);
    }
    

    实现您想要的,无需拆分声明和赋值。

    请注意:

    char  pb = '+';
    char  pc = pb;
    

    可以在某种意义上起作用:当编译器看到char pc=pb: 时,它拥有声明 pc 并将其初始化为 pb 所需的所有信息。但这并不是因为它不够聪明(更可能是因为语言说那种初始化器(pb)必须是一个常量)。

    【讨论】:

    • 它也适用于同一行的所有声明。可读性是个问题。
    • 我的意思是char pa = 'o', pb = '+', ... ;
    • @Quentin 是的。此外,在这种情况下,我发现使用重复行更舒服,然后大量输入 down-bs-d-down-bs-e-down-bs-f-down-bs-g-down-bs-h ...啊啊啊!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多