我刚刚发现C中的一个怪癖,我觉得很困惑.在C语言中,可以在声明结构之前使用指向结构的指针.这是一个非常有用的功能,因为当您处理指向它的指针时,声明是无关紧要的.我刚刚找到一个角落的情况,但是(令人惊讶的是)这不是真的,我无法解释原因.对我来说,这似乎是语言设计中的一个错误.
拿这个代码:
#include <stdio.h>
#include <stdlib.h>
typedef void (*a)(struct lol* etc);
void a2(struct lol* etc) {
}
int main(void) {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
得到:
foo.c:6:26: warning: ‘struct lol’ declared inside parameter list [enabled by default]
foo.c:6:26: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default]
foo.c:8:16: warning: ‘struct lol’ declared inside parameter list [enabled by default]
Run Code Online (Sandbox Code Playgroud)
要解决此问题,我们可以简单地执行此操作:
#include <stdio.h>
#include <stdlib.h>
struct lol* wut;
typedef void (*a)(struct lol* etc);
void …Run Code Online (Sandbox Code Playgroud) c ×1