C语言中的声明[已关闭]

yeotifhr  于 2023-05-06  发布在  其他
关注(0)|答案(1)|浏览(225)

**关闭。**这个问题是not reproducible or was caused by typos。目前不接受答复。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
两年前关闭。
Improve this question
我试图在C语言中声明它,但结果是一个错误。有什么误会吗?

错误

poker_comp.c: In function ‘newdeck’:
poker_comp.c:40:15: warning: assignment to ‘Card *’ {aka ‘struct card *’} from incompatible pointer type ‘Card *’ {aka ‘struct card *’} [-Wincompatible-pointer-types]
   40 |     deck->top = newcard(p,s);
      |               ^
poker_comp.c:41:12: warning: assignment to ‘Card ’ {aka ‘struct card *’} from incompatible pointer type ‘Card *’ {aka ‘struct card **’} [-Wincompatible-pointer-types]
   41 |     cursor = deck->top;
      |            ^

代码

typedef enum boolean {false, true} flipped;`
typedef struct card{
    int pips;
    char suit;
    bool flipped;
    int *nextCard;
}Card;

typedef struct deck{
    struct card[52];
    Card **cards;
}Deck;

typedef struct player{
    char name;
    int *c1, *c2;
    int acc;
}Player;
8fsztsew

8fsztsew1#

typedef enum boolean {false, true} flipped;`

是以反引号结尾的,这是错误的

struct card[52];

是错误的(并且等价于Card[52];,它也是错误的);也许你想要Card card_deck[52];,以后用card_deck代替card...
如果你在代码aprilia.c上使用GCC(实际上是Ubuntu 20上的GCC 10)作为gcc -Wall -Wextra -g -c aprilia.c,你会得到错误消息:

gcc -Wall -Wextra -c /tmp/aprilia.c -o /tmp/aprilia.o
aprilia.c:1:44: error: stray ‘`’ in program
    1 | typedef enum boolean {false, true} flipped;`
      |                                            ^
aprilia.c:9:16: error: expected identifier or ‘(’ before ‘[’ token
    9 |     struct card[52];
      |                ^

参见this C reference官网。阅读一本好的C编程书籍,如Modern C

也可以参考一些最近的C标准草案,如n1570或更新的标准。
考虑从 existingfree software中获得灵感,例如GNU Bash
还可以考虑使用一些静态分析工具,例如Frama-CClang analyzer(或者,也许在2021年年中,Bismon)。
对于C中的tagged union types,考虑在某个struct中有某个union字段。

相关问题