今天我正在与我的编译器发生另一项国内事务时,这个问题突然出现在我的脑海中.尽管我的粉红色(由于我在工作时所做的所有分号按压),我在一个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++编译器工作知识的人可以具体解释编译器正在做什么,这需要以"之前"的方式报告错误.
我编写了一个程序来交换数组中的两个结构,我的编码如下
#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)
在编译它时会出错, …
这个程序的输出是什么以及如何?
#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)