C++入门的一些报错和警告问题

这一学期在学程序设计基础,会碰到一些奇怪的作业问题。

这篇博客不定期更新,主要更新一些C++神奇的报错和警告,来督促自己以后不要再犯一些奇奇怪怪的问题(当然神奇的原因是因为我比较菜

首先要熟悉自己平常的程序和编译器

我所使用的是Devcpp

来打一声招呼~ 

0.查找自己的文件和编译器版本

我的MingGW地址是: C:\Program Files (x86)\Dev-Cpp\MinGW32\bin

在cmd中输入cd C:\Program Files (x86)\Dev-Cpp\MinGW32\bin

再查找版本gcc -v

 这里可以看到我的gcc版本为10.2.0

1.在写数组的时候出的问题

[Warning] variable 'a' set but not used [-Wunused-but-set-variable]

最最蠢的情况,就是not used,定义了但没有使用,就会显得很奇怪

这里当时遇到的问题就是,定义之后赋值了,也会警告,这个雀食要注意,哪怕是赋值了的数组,也有可能是未使用的。

 2.main函数是void还是int

有许多网上的例程给的是void main,但我的要求main must return int 

网上的有一些解释,是C++标准下的编译器main的返回必须是int

而有一些IDE或编译器不一定遵守C++标准,比如VS

但DevC++严格遵守C++标准,容易出现此类错误。

3.一些比较常见的 not declared

如果是变量的话就是没定义

还有一种可能是没有using namespace std;

error: `string' was not declared in this scope

这要么加std::,要么就在开头加using

如果是函数的话,多半是对应的库没有include

这里有一个算有点小冷的知识

.h后缀属于C,C++的库都去掉了这些后缀,因此大多库都是原先库的升级版

iostream.h里面定义的所有类以及对象都是在全局空间里,所以你可以直接用cout   


但在iostream里面,它所定义的东西都在名字空间std里面,所以你必须加上   
using namespace std才能使用cout

一般一个C++的老的带“.h”扩展名的库文件,比如iostream.h,在新标准后的标准库中都有一个不带“.h”扩展名的相对应,区别除了后者的好多改进之外,还有一点就是后者的东东都塞进了“std”名字空间中。 

但有一个比较有意思的特例:string
问题在于C++要兼容C的标准库,而C的标准库里碰巧也已经有一个名字叫做“string.h”的头文件,包含一些常用的C字符串处理函数,比如楼主提到的strcmp。 
这个头文件跟C++的string类半点关系也没有,所以<string>并非<string.h>的“升级版本”,他们是毫无关系的两个头文件。 
要达到楼主的目的,比如同时:

#include <string.h> 
#include <string> 
usingnamespace std; 
或者 
#include <cstring> 
#include <string> 
其中<cstring>是与C标准库的<string.h>相对应,但裹有std名字空间的版本。

最大的挑战是把字符串头文件理清楚:

<string.h>是旧的C 头文件,对应的是基于char*的字符串处理函数;<string>是包装了std 的C++头文件,对应的是新的string 类(看下文);
<cstring>是对应于旧C 头文件的std 版本。(包含std)

<string>是c++ 的头文件,其内包含了一个string类,string s1就是建立一个string类的对象 
<string.h> 的c语言的东西 并无类,所以不能 string s1 

<cstring>文件实际上只是在一个命名空间std中include了 <string.h>

比如memeset函数就是比较鲜明的例子

4.预处理#define不用加分号

这是因为

预处理程序指令不使用分号。这是因为他们使用换行符来分隔语句。

所以当你按了一下回车键的时候,就已经实现了语句的分隔了 

5.warning: control reaches end of non-void function [-Wreturn-type]

这个但是比较有点迷离,但具体的原因是在调用函数的return上或者主函数的结果没有return 0上出现了问题,及时改正就行。

但也有一次实验出现了怎么改都没用的情况,暂时也不知道那个玄学warning是咋回事,希望以后水平见长能找到错

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值