A proposal to build numpy without warning with a big set of warning flags¶
作者: | 大卫Cournapeau |
---|---|
联系: | david @ ar 。媒体。 kyoto-u 。 ac 。 jp |
日期: | 2008-09-04 |
Executive summary¶
当构建numpy和scipy时,我们限制在一组相当有限的警告编译器,因此缺少一大类潜在的错误,可以用更强的警告标志检测。这个NEP的目标是提供用于清理代码的各种方法,并实现一些策略,使numpy可构建与更大的警告标志,同时保持构建警告免费。
Warning flags¶
每个编译器检测一组不同的潜在错误。基线将是gcc -Wall -W-Wextra。理想情况下,一个完整的集将是很好的:
-W -Wall -Wextra -Wstrra-prototypes -Wmissing-prototypes -Waggregate-return -Wcast-align -Wcast-qual -Wnested-externs -Wshadow -Wbad- function -cast -Wwrite-strings“
英特尔编译器,VS with / W3 / Wall,Sun编译器也有额外的警告。
Kind of warnings¶
C Python扩展代码自然会产生大量的虚假警告。目标是有一些工具来标记一些典型的C-Python代码,以便编译器不会在这些情况下生成警告;标签过程必须是干净,可读和健壮的。特别是,它不应该使代码更模糊或更糟,破坏工作代码。
unused parameter¶
这一个经常出现:任何python可调用的C函数都有两个参数,其中第一个不用于函数(仅适用于方法)。一种解决方法是用宏NPY_UNUSED标记函数参数。这个宏使用编译器特定的代码来标记变量,并且修改它,例如一旦它被标记就不可能使用它。
应用编译器特定选项的代码可以是:
- #if defined(__ GNUC__)
- #define __COMP_NPY_UNUSED __attribute__((__unused__))
- #elif defined(__ ICC)
- #define __COMP_NPY_UNUSED __attribute__((__unused__))
- #其他
- #define __COMP_NPY_UNUSED
#万一
变量调整将是:
#define NPY_UNUSED(x)(__NPY_UNUSED_TAGGED ## x)__COMP_NPY_UNUSED
当应用于变量时,将得到:
int foo(int * NPY_UNUSED(dummy))
扩大到
int foo(int * __NPY_UNUSED_TAGGEDdummy __COMP_NPY_UNUSED)
因此避免任何意外使用变量。这是一个纯粹的C,便于携带。每变量警告禁用是编译器特定的。
signed/unsigned comparison¶
更棘手:不总是清楚做什么
half-initialized structures¶
只是把元素的NULL。