| 
 | 
 
 
发表于 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,跳过了这个'(',当遇到最后 
一个')'的时候发现并没有'('与之匹配,所以报了这样的错. 
 |   
 
 
 
 |