题外话:在编写程序时,可以先用特殊值代入,想好一个直观的框架,然后再进行代码编写。
·[Error] expected ';' before 'return'
这个问题主要是:老忘记打分号(不过问题不大,反正编译都不能过)
PS:你的编译器只会告诉你,这一段前面缺一个分号,但是你其实要加在上一句话
int main()
{
printf("Hello world!\n")//你要加在这一行末尾
return 0;//错误信息显示:[Error] expected ';' before 'return'
}
int x = 0;
do{
++x;
printf("Hello world!\n");
} while (x < 10);
int x = 0;
while (x < 10);
{
++x;
printf("Hello world!\n");
}
int x = 0;
while (x < 10)
;//这里边代表什么都不做,然后x一直小于10,陷入死循环
{
++x;
printf("Hello world!\n");
}
int x = 0;
while (x < 10) {//这里就很明显不需要分号了
++x;
printf("Hello world!\n");
}
·[Error] ld returned 1 exit status
这个问题主要是由于终端/命令行(黑黑的跟cmd一样的窗口)没关;
通常在调试时候停止了调试之后,再次进行编译的时候出现。
长久有效的解决方案:也许以后不要点叉叉停止调试,直接关闭命令行来停止调试就好了。
*借阅了 CSDNid: 汝之宿命 的博客内容
·[Error] expected declaration or statement at end of input
这个可能是:
1.某一变量在使用前没有声明(这个只是道听途说,我的dev C++编译器没有这种情况过),但是大多是 4 的那种报错
2. ★某 个★ 地 方 少了括号: 简 直 要 命
这个问题就大了,它既可能出现在你的 main 函数中(就是你的主体代码),又可能出现在你的自定义函数中,而你的报错……它只会显示在最后一行…( 太蠢了!)
*借阅了 CSDNid: dengw8 的博客内容
·[Error] 'x' undeclared (first use in this function)
哎哟 ~ 这个问题真是太好办了,定义一下就行,你的编译器肯定也会给你准确定位的。
·[Error] variable-sized object may not be initialized
据说以下两种情况会显示 Warning 报错(苹果的操作系统的自带编译器会),但是我的Dev C++没有报错,而是编译通过且warning个数依旧是0(太不负责任了) //2020.8.31划去
目前发现,以下 //2020.9.2划去(3) 4 种情况均在苹果的系统上看到过warning,难道 dev C++ 不会报 warning ???
目前发现以下 4 种情况不会在 dev C++ 出现 warning 类型报错,但是会在 mac 上的编译器报错。( 而今天,我终于发现了 dev C++ 也会报的错了,详情见本大条目的第 2 条目 )
一般是在一些本大多用于判断的句子里使用了赋值语句
if ( a = 20 ) {//这里的等号应该是双等号表示判断 ==
...;
}
报错信息大概是类似这样的:
if ( a = 20 )
~↑~
" = " --> " == "
1 warning generated.
一般是在非 for 的地方用了逗号
int a = 3+4,5+6;//建议不要在 for 以外用这种奇怪的运算符
~↑~(result unused)
1 warning generated.
一般是调用函数的时候忘记打括号了
·warning: expression result unused [-Wunused-value]//来自mac的C语言IDE
例如这样的:
void helloWorld()
{
printf("Hello World!");
return;
}
int main()
{
helloWorld;//这里应该写 helloWorld();
return 0;
}
会显示
warning: expression result unused [-Wunused-value]//来自mac的C语言IDE
helloWorld;
↑~~~~~~~
1 warning generated.
1
#include
void hello(int i)//这要求int型↓
{
printf("hello! %d\n",i);
return;
}
int main()
{
hello(2.4);//这里输入了一个double型
printf("hello!\n");
return 0;
}
const NUMBER = 10;//应当写:const int NUMBER = 10;
·[Warning] type defaults to 'int' in declaration of 'NUMBER'
//注:以下显示都不是在控制台,而是在终端/命令行
Process exited after 1.625 seconds with return value 3221225477
//上面的数字可能是任意的其他值
这大多是因为你在scanf里指向的是变量而不是地址,什么意思呢?你scanf里面的变量没加 & 符号。
这类问题都挺大的:经常检查了半天结果才意识到 & 没加,十分蠢,还以为是其他语句出错的
长久有效的解决方案:忘记一次就翻开词典,抄5个英文单词十遍,中、英文加音标
一般分为两种:
调试的时候发现一个 double 数值特别奇怪(初始化了也奇怪);
多半是用了 %d 去指向这个变量的地址了。
调试的时候发现一个 int / double 数值为初始值/特奇怪(未初始化的时候);
多半是用了 %lf / %f 去指向这个变量的地址了。
请注意:scanf 对 double 用 %lf ,而 printf 用 %f
输出的时候发现一个 int / double 数值特别奇怪(初始化了也奇怪);
基本上同理,就不过多赘述了。(懒)
这在有些情况下是会崩的(不同电脑)
#include
int main()
{
int a[5];
a[0]=5;
a[5]=9;//赋值a[5]是有错的,因为只有0-4共5个数的数组
printf("a0=%,a5=%d",a[1],a[5]);
return 0;
}
但是在我的dev C++上却能有结果能有输出
因为这里的数组后面刚好是可以修改的,如果碰上不可修改的地方,比如0地址,就会自动崩溃。
a0=,a5=0
--------------------------------
Process exited after 0.02038 seconds with return value 0
在主函数内声明int a[1000000],运行出错
visual studio code:
# segmentation fault
dev cpp: 程序运行反馈最后的 return value 不是0就说明程序运行崩溃
Process exited after 0.2345 seconds with return value 3221225725
请按任意键继续. . .
原因:局部 / 本地变量所能分配的空间较小(2MB),1e6(1,000,000)已经4MB多了,无法分配这么多内存。
解决方案:使用全局变量(变量定义放在 int main 前面即可)
详情见:红豆布丁 大大的博客
特别鸣谢:Richard-Cai 的博客内容,使用各种 CSDN 编辑器的字体的教程*