这是我尝试开始通常不会遇到的GCC特殊功能的集合.这是在@jlebedev之后的另一个问题中提到的g ++的"Effective C++"选项,
-Weffc ++这个选项警告C++代码,它违反了Scott Meyers的"Effective C++"和"More Effective C++"一书中给出的一些编程指南.例如,如果使用动态分配的内存的类没有定义复制构造函数和赋值运算符,则会给出警告.请注意,标准库头文件不遵循这些准则,因此您可能希望使用此选项作为对您自己的代码中可能出现的问题的偶然测试,而不是一直使用它进行编译.
还有哪些很酷的功能?
我不时会浏览当前的GCC/G ++命令行参数文档并更新我的编译器脚本,以便对任何类型的编码错误更加偏执.这是,如果你有兴趣.
不幸的是我没有记录它们,所以我忘记了最多,但是 - -pedantic,-Wall,-Wextra,-Weffc ++,-Wshadow,-Wnon-virtual-dtor,-Wold-style-cast,-Woverloaded-virtual等等其他人总是很有用,警告我有潜在的危险情况.我喜欢这种可自定义的方面,它迫使我编写干净,正确的代码.它很适合我.
然而,他们并非没有头痛,特别是-Weffc ++.举几个例子:
Final<T>
类(如果T实际上是从T派生的,它会阻止T的子类化)必须将T包装在一个私有包装类中以声明它为朋友,因为标准的平坦禁止与模板参数建立联系.这可能听起来有点受虐狂,但总的来说,这些非常酷的功能增加了我对C++和一般编程的理解.
G ++还有哪些其他很酷的功能?嗯,它是免费的,开放的,它是最广泛使用的现代编译器之一,始终优于其竞争对手,几乎可以吃任何人投入它,几乎在每个平台上都可用,可定制到地狱,不断改进,拥有广泛的社区 - 什么不喜欢?
如果遵循的代码路径在没有“返回值”语句的情况下结束函数,则返回值(例如 int)的函数将返回随机值。不注意这一点可能会导致异常和超出范围的内存写入或读取。
例如,如果使用函数来获取数组的索引,并且使用了错误的代码路径(不以 return 'value' 语句结尾的代码路径),则将返回一个可能太大的随机值作为数组的索引,当您错误地弄乱堆栈或堆时,会导致各种令人头痛的问题。