【个人记录】关于初学者刚开始可能遇到的一些Dev c++报错及其解决方案(随缘更新)

个人是从2020年8月下旬才开始接触C语言的,看(白嫖)的是浙江大学翁老师的视频,以下是一些遇到的报错问题和解决方法       

由于改用了VScode,所以减少了dev C++的使用频率,但是以后应该还是会在两边都跑遍的(下次一定)

 题外话:在编写程序时,可以先用特殊值代入,想好一个直观的框架,然后再进行代码编写。

·Error 类型


 1.分号
·[Error] expected ';' before 'return'

  这个问题主要是:老忘记打分号(不过问题不大,反正编译都不能过)
  PS:你的编译器只会告诉你,这一段前面缺一个分号,但是你其实要加在上一句话

	int main()
	{
		printf("Hello world!\n")//你要加在这一行末尾
		return 0;//错误信息显示:[Error] expected ';' before 'return'
	}
   特别要注意:do while语句后方,while后面要分号(半角)
  例如:
	int x = 0;
	do{
		++x;
		printf("Hello world!\n");
	} while (x < 10);
   另外要注意:while语句后方,不要乱加分号
  例如:
	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");
	}

 2.忘记关终端/命令行
·[Error] ld returned 1 exit status

  这个问题主要是由于终端/命令行(黑黑的跟cmd一样的窗口)没关;

  通常在调试时候停止了调试之后,再次进行编译的时候出现。

  长久有效的解决方案:也许以后不要点叉叉停止调试,直接关闭命令行来停止调试就好了。

  *借阅了 CSDNid: 汝之宿命 的博客内容

 3.括号忘记加(出大问题)
·[Error] expected declaration or statement at end of input

  这个可能是:
   1.某一变量在使用前没有声明(这个只是道听途说,我的dev C++编译器没有这种情况过),但是大多是 4 的那种报错
   2. ★某 个★ 地 方 少了括号: 简 直 要 命
     这个问题就大了,它既可能出现在你的 main 函数中(就是你的主体代码),又可能出现在你的自定义函数中,而你的报错……它只会显示在最后一行…( 太蠢了!)
  *借阅了 CSDNid: dengw8 的博客内容

 4.变量未定义
·[Error] 'x' undeclared (first use in this function)

  哎哟 ~ 这个问题真是太好办了,定义一下就行,你的编译器肯定也会给你准确定位的。

 5.变量未定义

  

·[Error] variable-sized object may not be initialized

·Warning 类型

 1.

  据说以下两种情况会显示 Warning 报错(苹果的操作系统的自带编译器会),但是我的Dev C++没有报错,而是编译通过且warning个数依旧是0(太不负责任了) //2020.8.31划去

  目前发现,以下 (3) 4 种情况均在苹果的系统上看到过warning,难道 dev C++ 不会报 warning ??? //2020.9.2划去
  目前发现以下 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;
	}
 2. const 后忘记加数据类型( 会默认为int )
	const NUMBER = 10;//应当写:const int NUMBER = 10;
·[Warning] type defaults to 'int' in declaration of 'NUMBER'

·无报错无警告 类型(重灾区)

 //注:以下显示都不是在控制台,而是在终端/命令行

 1.scanf 未指向地址
Process exited after 1.625 seconds with return value 3221225477
//上面的数字可能是任意的其他值

  这大多是因为你在scanf里指向的是变量而不是地址,什么意思呢?你scanf里面的变量没加 & 符号。
  这类问题都挺大的:经常检查了半天结果才意识到 & 没加,十分蠢,还以为是其他语句出错的
  长久有效的解决方案:忘记一次就翻开词典,抄5个英文单词十遍,中、英文加音标

 2.数据类型出错

  一般分为两种:

   A.scanf:

    调试的时候发现一个 double 数值特别奇怪(初始化了也奇怪);
    多半是用了 %d 去指向这个变量的地址了。

    调试的时候发现一个 int / double 数值为初始值/特奇怪(未初始化的时候);
    多半是用了 %lf / %f 去指向这个变量的地址了。

    请注意:scanfdouble%lf ,而 printf%f

   B.printf:

    输出的时候发现一个 int / double 数值特别奇怪(初始化了也奇怪);
    基本上同理,就不过多赘述了。(懒)

 3.数组溢出~~(迷惑行为)~~

  这在有些情况下是会崩的(不同电脑)

	#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

 3.数组过大

  在主函数内声明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 编辑器的字体的教程*

你可能感兴趣的:(初学,C语言,c语言)