【个人记录】关于初学者刚开始可能遇到的一些Dev c++报错及其解决方案(随缘更新)_[error] expected ';' before 'return-程序员宅基地

技术标签: 初学  C语言  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 <stdio.h>
	
	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 <stdio.h>

	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 编辑器的字体的教程*

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_47287635/article/details/108304873

智能推荐

zabbix短信告警oracle,zabbix 实现短信告警-程序员宅基地

文章浏览阅读402次。之前一直调用飞信接口发送告警信息,最近购买了第三方短信接口。所以准备使用接口发送告警。短信接口是基于https的摘要认证。https认证还是自己做的,调用接口的时候还需要load证书。感觉超级难用,不管那么多,先让它跑起来再说。废话不多说,先上代码。#!/usr/bin/envpython#coding:utf-8importrequestsfromrequests.authimport..._zabbix实现短信告警

soapui中文操作手册(四)----MOCK服务_soapui设置成中文-程序员宅基地

文章浏览阅读6.8k次,点赞2次,收藏12次。转载地址:http://www.cnblogs.com/zerotest/p/4670005.htmlWeb Service Mocking是武器库一个非常有用的工具。这是解决“如果没有Web服务如何创建针对性的Web服务测试”问题的办法。Web Service Mocking将在这里派上用场。它允许你实际的Web服务产生之前,创建近似或模拟的Web Service。在本教_soapui设置成中文

Swift 包管理器 (SPM):管理 iOS 中的依赖关系_ios spm-程序员宅基地

文章浏览阅读845次,点赞29次,收藏7次。Swift 包管理器 (SPM):管理 iOS 中的依赖关系_ios spm

SCI论文润色真有必要吗?-程序员宅基地

文章浏览阅读381次,点赞10次,收藏7次。总的来说,sci论文润色虽然不会改变论文的学术内容和贡献,但它能够显著的提升论文的质量和可读性,从而增加论文被接受和引用的机会。在论文投稿前都是需要润色的,特别是英文论文投稿,一定得靠谱。但如果是一些小问题,比如语法语句错误,专业言论不恰当,那么你的文章会在投稿过程中外审评定完以后,也会给你返修意见和修改机会。如果是新作者,或者是对自己的语言能力不那么自信,那么是很有必要的。其他人的视角可能会发现你忽略的错误或不清晰的表达,同时也可以提供有关论文结构和逻辑的反馈意见。关于SCI论文润色的常见方法。

Prometheus监控数据格式的学习-程序员宅基地

文章浏览阅读1.1k次,点赞33次,收藏9次。Prometheus 指标(metrics)的数据形式是一种简单的文本格式(容易通过 HTTP 协议被 Prometheus 服务器拉取)。每一行包含了一个指标的数据,通常包括指标名称、可选的一组标签以及指标的值。Prometheus 的指标数据可以有不同类型,如 Counter、Gauge、Histogram 和 Summary,它们的表示形式会有所不同。

数字图像处理(10): OpenCV 图像阈值化处理_binarization threshold-程序员宅基地

文章浏览阅读5.6k次,点赞26次,收藏43次。目录1 什么是阈值化-threshold()2 二进制阈值化3 反二进制阈值化4 截断阈值化5 反阈值化为06 阈值化为07 小结参考资料1 什么是阈值化-threshold()图像的二值化或阈值化 (Binarization)旨在提取图像中的目标物体,将背景以及噪声区分开来。通常会设定一个阈值,通过阈值将图像的像素划分为两类:大于阈值的..._binarization threshold

随便推点

使用安卓模拟器时提示关闭hyper-v_hyperv影响 模拟器-程序员宅基地

文章浏览阅读1.6w次。本电脑是宏碁传奇X,cpu是r7 5800u,显卡rtx3050;使用了雷电、mumu两款安卓模拟器,雷电启动报错g_bGuestPowerOff fastpipeapi.cpp:1161,使用了网上的所有方案都不行,包括开启VT(amd开启SVM),命令关闭hyper-v服务等;尝试mumu模拟器,安装时支持vt项检测不通过,后来发现mumu模拟器在amd的cpu上只支持32位版,换装32位版检测通过,但是只要打开模拟器就提示需要关闭hyper-v,我已经确认关闭后,启动依旧这样提示,查找了网上很_hyperv影响 模拟器

【大厂秘籍】系列 - Mysql索引详解-程序员宅基地

文章浏览阅读564次。MySQL官方对索引定义:是存储引擎用于快速查找记录的一种数据结构。需要额外开辟空间和数据维护工作。● 索引是物理数据页存储,在数据文件中(InnoDB,ibd文件),利用数据页(page)存储。● 索引可以加快检索速度,但是同时也会降低增删改操作速度,索引维护需要代价。

CSS实现当鼠标停留在一个元素上时,使得两个元素的样式发生改变_css鼠标悬浮修改其他元素样式-程序员宅基地

文章浏览阅读825次。使用兄弟选择器实现同时改变两个元素的样式_css鼠标悬浮修改其他元素样式

文献学习-40-基于可迁移性引导的多源模型自适应医学图像分割-程序员宅基地

文章浏览阅读4.8k次,点赞32次,收藏43次。香港中文大学袁奕萱教授团队提出了一种名为多源模型自适应 (MSMA) 的新型无监督域适应方法。MSMA 旨在仅利用预训练的源模型(而非源数据)将知识迁移到未标记的目标域,从而实现对目标域的有效分割。

(4)FPGA开发工具介绍(第1天)-程序员宅基地

文章浏览阅读8.8k次。(4)FPGA开发工具介绍(第1天)1 文章目录1)文章目录2)FPGA初级课程介绍3)FPGA初级课程架构4)FPGA开发工具介绍(第1天)5)技术交流6)参考资料2 FPGA初级课程介绍1)FPGA初级就业课程共100篇文章,目的是为了让想学FPGA的小伙伴快速入门。2)FPGA初级就业课程包括FPGA简介、Verilog HDL基本语法、Verilog HDL 入门实例、FPGA入门实例、Xilinx FPGA IP core设计、Xilinx FPGA原语与U_fpga开发工具

js中的定时器如何使用_js定时器用法-程序员宅基地

文章浏览阅读1.4k次。JS提供了一些原生方法来实现延时去执行某一段代码,下面来简单介绍一下setTiemout、setInterval、setImmediate、requestAnimationFrame。首先,我们先来了解一下什么是定时器:JS提供了一些原生方法来实现延时去执行某一段代码下面来简单介绍一下setTimeout() :在指定的毫秒数后调用函数或计算表达式。setTimeout(code,millisec,lang)参数 描述code 必需。要调用的函数后要执行的 JavaScript 代码串。_js定时器用法

推荐文章

热门文章

相关标签