相关疑难解决方法(0)

为什么C++编译器在行之后而不是在行上给出错误?

今天我正在与我的编译器发生另一项国内事务时,这个问题突然出现在我的脑海中.尽管我的粉红色(由于我在工作时所做的所有分号按压),我在一个if声明之前设法错过了一个.显然,这导致编译错误:

错误C2143:语法错误:缺少';' 在"如果"之前

所以我在想"好哎呀,你为什么不能告诉我缺少分号,而不是行的行之后的问题." 然后我开始尝试其他类似的语法错误:

错误C2065:'myUndeclared':未声明的标识符

错误C2143:语法错误:在'if'之前缺少')'

等等...

现在,所有这些错误同样会带我走到问题之后,并在if声明之前抱怨某事.

考虑以下:

SomeFunction(x) //Notice, there is no ';' here

if(bSomeCondition)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

我收到两个编译错误:

(第265行)错误C2065:'x':未声明的标识符

(第266行)错误C2143:语法错误:缺少';' 在"如果"之前

但是,第一个错误正确告诉我行号,尽管丢失了分号.这告诉我编译器在解析时不会被绊倒,并且能够使它超过分号问题.那么,为什么编译器坚持以这种方式报告语法错误呢?在找到它们的行上报告其他错误(非语法).这是否与编译器进行多次传递有关?基本上,我希望具有C++编译器工作知识的人可以具体解释编译器正在做什么,这需要以"之前"的方式报告错误.

c++ compiler-construction grammar compilation

9
推荐指数
3
解决办法
3837
查看次数

二进制*的操作数无效(有'ab {aka struct a}'和'ab*{aka struct a*}')

我编写了一个程序来交换数组中的两个结构,我的编码如下

#include <stdio.h>
struct a {
    char *name;
    int id;
    char *department;
    int num;
};
typedef struct a ab;

void swap(ab *, ab *);

int main(int argc, char *argv[])
{
    ab array[2] = {{"Saud", 137, "Electronics", 500}, {"Ebad", 111, "Telecom", 570}};
    printf("First student data:\n%s\t%d\t%s\t%d", array[0].name, array[0].id,
           array[0].department, array[0].num);

    printf("\nSecond Student Data\n%s\t%d\t%s\t%d\n", array[1].name, array[1].id,
           array[1].department, array[1].num);

    swap(&array[0], &array[1]);
    // printf("")
    return 0;
}

void swap(ab *p, ab *q){
    ab tmp;
    tmp = *p
    *p = *q;
    *q = tmp;
}
Run Code Online (Sandbox Code Playgroud)

在编译它时会出错, …

c linux pointers structure

3
推荐指数
1
解决办法
1179
查看次数

为什么语法如"a = b --- //换行,行没有结束;" 不会产生语法错误?

这个程序的输出是什么以及如何?

#include<stdio.h>

int main(){
     int a=0,b=10;
     a=b---
     printf("the value of b=%d",b);
     printf("the value of a=%d",a);
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

c syntax

-2
推荐指数
1
解决办法
69
查看次数