|
发表于 2018-10-27 16:16:52
|
显示全部楼层
观察楼主写代码的风格,应该是有其他语言基础的,或者是学这语言的时候有一个很好的老师带的,
所以应该是想深入了解一下为什么报这些提示;
鉴于很多编译器都支持C99标准,为了想通这个问题,那我们先来看看C99标准
auto break case char const continue default
do double else enum extern float for goto
if inline int long register restrict return
short signed sizeof static struct switch typedef union unsigned
void volatile while _Bool _Complex _Imaginary
The above tokens (case sensitive) are reserved (in translation phases 7 and 8) for use as keywords,
and shall not be used otherwise.
//保留(在编译时期 7 和 8)以上这些标记(区分大小写)用作关键字, 且不应该挪为他用;
所以,从以上表述可以看出,struct是要被解释为关键字的,所以当遇到struct编译器将它看成一个关键字,
而通过struct关键字的语法知道,后面应该需要一个标识符(identifier),但是当扫描到"addpoint("这里,
发现这不是一个标识符(C中标识符不允许有'(',可以参考相关C基础书籍),所以expected identifier出现了.
至于后面的or '(' before 'struct'. 的产生,在VS里报的是缺少')',这就看具体编译器了,但大概可以这么
推测,因为扫描到addpoint(这个左括号的时候将这整个字符串判给前面的struct,跳过了这个'(',当遇到最后
一个')'的时候发现并没有'('与之匹配,所以报了这样的错.
|
|