编写无警告的代码

本文内容版权归原作者(作者e5Max)所有,我不对本文内容的真实性做任何保证。
原文地址:编写无警告的代码

今天把项目的Qt版本从Qt4.6.3升级到Qt4.8.4,重新编译项目代码的时候,特别关注了一下编译器的警告。于是找到《C++编程规范——101条规则、准则与最佳实践》翻了翻,重温了一下第1条 在高级别警告干净利落地进行编译。
如果编译器对某个构造发出警告,一般表明代码中存有潜在的问题。警告就好比代码的“肿瘤”,可能是良性的也可能恶性的——作为代码医生的我们不能对其视而不见。必须“把它弄清楚”,然后通过“改写代码以排除警告”!
典型的编译器警告示例:
1.”Unused function parameter”(未使用的函数参数):
编译器会对没有使用到的函数参数报告警告。如果确实不需要,那直接删除函数参数名就行了。
2. “Variable defined but never used”(定义了从未使用过的变量):
如果确实不需要,可以直接将之删除。 如果该变量的实例化是为了启动某项服务,则经常可以通过插入一个变量本身的求值表达式,使编译器不再报警。(这种求值不会影响运行时的速度)
3. “Variable may be used without being initialized”(变量使用前可能未经初始化):
这种警告通常意味着你的代码存在问题,请慎重处理之。
4. “Missing return”(遗漏了return语句)。:
这可能是一种好现象。即使你认为控制永远都不会运行到结尾或某个分支,则应该加上执行assert(false ) 的语句。
像下面这样(兼有注释作用的断言):

  default:  
     assert( !"should never get here!" );  // !“string” 的求值结果为false  
  
  1. “signed/unsigned mismatch”(有符号数/无符号数不匹配):
    通常需要插入一个显式的强制转换。
  2. “warning: type qualifiers ignored on function return type”(忽略了函数返回类型的类型限定符):
    通常是因为在函数前面的返回值面前添加了多余的 const 限定符。
    例如,const int getAge() const { return m_age; } ,最前面的const 是多余的,编译器会报告警告。
  3. “warning: deprecated conversion from string constant to ‘char*'”(不推荐的转化用法):
    函数原型:void setName(char *name);

    函数调用:setName(“personName”); // 编译器报告警告

释义:这是因为 char * 是一个指针,其背后的含义是:给我一个字符串,我可以修改它。

而如果我们传给函数一个“字符串常量”,这应该是没法被修改的。所以说,比较合理的办法是把参数类型修改为const char * ,而这个类型背后的含义是:给我一个字符串,我只要读取它(const意味着只读)。
8. “warning: “MAX_PATH” redefined” (重复定义) :

  #ifndef MAX_PATH
  #define MAX_PATH(260)
  #endif
  
  1. 第三方头文件。

  2. “auto-importing has been activated without –enable-auto-import specified on the command line”

补充脱了很长时间的QQ

首先向大家抱歉,之前说好的更新QQ,结果很长时间了,都没见动静。

这一段时间打在好好学习,电脑碰的少了,自然就忘了更新……还望见谅。

废话少说,下面是在Arch Linux上面运行QQ的方法。

首先你要有一个Wine,安装好wine,下面是我的安装了的Wine组件

实际上只需要安装上面已安装的东西就行。

然后从官网下载轻聊版(貌似国际版更好,不推荐普通版,首先是太庞大,其次安装的时候也

容易出错。但是我没试过国际版……)。然后运行安装包进行安装即可。这时候,它会安装到你的

Wine设置的C盘目录(这个东西你可以打开Wine的设置来搞,最好在设置的时候把字体什么的也一

并设置好,字体推荐使用微软雅黑,从随便一个Win7以上的电脑拷一个就行)。

安装完毕之后,你就可以在安装目录中的Bin文件夹中找到QQ.exe,运行之即可。

然而,你会发现,你在登录页面,看不到你输入的账号,这个没什么关系,你只需要一个一个输进去就行,可以勾上自动登录之类的(省的下次再这样)。然后一切都和Windows一样了。

不过,我发现,我的聊天界面,是不显示聊天记录的……就像下面

聊天框

实际上我框里面是应该有消息的……不过点一下消息记录还是可以看到消息的,虽然有点麻烦,但是保密性好不是?

然后下面是一些其他的截图。

能显示弹窗

还有主界面

不过右下角的企鹅图标,要双击才能弹出原来的框……

 

预告

注意,这只是预告,重复一边,只是预告
开学第一件事就是在archlinux上面折腾企鹅。目前大致上已经成功了,有图为证
QQ启动界面

 

 

 

 

然而有一些问题,比如最开始启动的时候,界面上的字总是乱码(其实是方框);还有聊天界面上有的消息显示不出来等等。
在不定日期(15天)内,Pret会将配置方法再做一个视频,并同步更新到我这个小站中,敬请期待~