【问题标题】:gcc array of "strings" declaration failing [duplicate]“字符串”声明的gcc数组失败[重复]
【发布时间】:2018-05-26 18:14:49
【问题描述】:

我正在尝试编写一个简单的 c 程序,但在声明“字符串”数组时遇到了问题。以下代码编译没有错误:

#define HAND_SIZE 10;
int main()
{
    char * cards[13] = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};

    int player[HAND_SIZE];
}

但我不能将播放器变成“字符串”数组而不是整数。如果我执行以下任一操作:

char * player[HAND_SIZE];

char player [HAND_SIZE][];

char player [HAND_SIZE][5];

//repeat the above with '= {}' and '= {""}' initializations

我得到错误:

 error: expected ‘]’ before ‘;’ token

为什么会发生这种情况,如何在 c 中声明一个空的“字符串”数组?

【问题讨论】:

    标签: c arrays initialization declaration


    【解决方案1】:

    预处理器指令不应以分号结尾

    #define 行结束后的分号给您错误,这将起作用:

    #define HAND_SIZE 10
    int main()
    {
        char * cards[13] = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
    
        int player[HAND_SIZE];
    }
    

    【讨论】:

    • 修复了,谢谢
    • 可以以分号结尾。只是你不应该这样做永远
    • @Jean-FrançoisFabre 你是对的。我已经更新了答案。只有 statements 在 c/c++ 中以 ; 结尾,#define 是预处理器指令而不是语句。顺便谢谢。
    • 预处理指令可以以分号结尾——你只需要知道你在做什么。
    • 但这确实是一种不好的做法。因为之后,宏用户可以省略分号,这会混淆阅读器和 IDE...
    猜你喜欢
    • 2023-03-12
    • 2014-01-03
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多