Lsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/dev-tools/sparsemodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/zh_TW/dev-tools/sparsemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/it_IT/dev-tools/sparsemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/ja_JP/dev-tools/sparsemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/ko_KR/dev-tools/sparsemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/sp_SP/dev-tools/sparsemodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubh paragraph)}(hyCopyright 2004 Linus Torvalds Copyright 2004 Pavel Machek Copyright 2006 Bob Copeland h](h;Copyright 2004 Linus Torvalds Copyright 2004 Pavel Machek <}(hhhhhNhNubh reference)}(h pavel@ucw.czh]h pavel@ucw.cz}(hhhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:pavel@ucw.czuh1hhhubh> Copyright 2006 Bob Copeland <}(hhhhhNhNubh)}(hme@bobcopeland.comh]hme@bobcopeland.com}(hhhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:me@bobcopeland.comuh1hhhubh>}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/dev-tools/sparse.rsthKhhhhubh field_list)}(hhh]hfield)}(hhh](h field_name)}(horphanh]horphan}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKubh field_body)}(hhh]h}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhhhhhhhNubh)}(hhh](h)}(hhh](h)}(hOriginalh]hOriginal}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hhhKubh)}(h#Documentation/dev-tools/sparse.rst h]h)}(h"Documentation/dev-tools/sparse.rsth]h"Documentation/dev-tools/sparse.rst}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj<ubah}(h]h ]h"]h$]h&]uh1hhj+ubeh}(h]h ]h"]h$]h&]uh1hhhhKhj(hhubh)}(hhh](h)}(h翻译h]h翻译}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhhhKubh)}(hLi Yang h]h)}(hLi Yang h](h Li Yang <}(hjohhhNhNubh)}(hleoyang.li@nxp.comh]hleoyang.li@nxp.com}(hjwhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:leoyang.li@nxp.comuh1hhjoubh>}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjkubah}(h]h ]h"]h$]h&]uh1hhjZubeh}(h]h ]h"]h$]h&]uh1hhhhK hj(hhubh)}(hhh](h)}(h校译h]h校译}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhKubh)}(h-司延腾 Yanteng Si h]h)}(h,司延腾 Yanteng Si h](h司延腾 Yanteng Si <}(hjhhhNhNubh)}(hsiyanteng@loongson.cnh]hsiyanteng@loongson.cn}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:siyanteng@loongson.cnuh1hhjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhhK hj(hhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhtarget)}(h.. _cn_sparse:h]h}(h]h ]h"]h$]h&]refid cn-sparseuh1jhKhhhhhhubhsection)}(hhh](htitle)}(hSparseh]hSparse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(hXjSparse是一个C程序的语义检查器;它可以用来发现内核代码的一些潜在问题。 关 于sparse的概述,请参见https://lwn.net/Articles/689907/;本文档包含 一些针对内核的sparse信息。 关于sparse的更多信息,主要是关于它的内部结构,可以在它的官方网页上找到: https://sparse.docs.kernel.org。h](hXISparse是一个C程序的语义检查器;它可以用来发现内核代码的一些潜在问题。 关 于sparse的概述,请参见https://lwn.net/Articles/689907/;本文档包含 一些针对内核的sparse信息。 关于sparse的更多信息,主要是关于它的内部结构,可以在它的官方网页上找到: }(hj hhhNhNubh)}(hhttps://sparse.docs.kernel.orgh]hhttps://sparse.docs.kernel.org}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1hhj ubh。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhh](j)}(h#使用 sparse 工具做类型检查h]h#使用 sparse 工具做类型检查}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*hhhhhKubh)}(hD"__bitwise" 是一种类型属性,所以你应该这样使用它::h]hG“__bitwise” 是一种类型属性,所以你应该这样使用它:}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj*hhubh literal_block)}(htypedef int __bitwise pm_request_t; enum pm_request { PM_SUSPEND = (__force pm_request_t) 1, PM_RESUME = (__force pm_request_t) 2 };h]htypedef int __bitwise pm_request_t; enum pm_request { PM_SUSPEND = (__force pm_request_t) 1, PM_RESUME = (__force pm_request_t) 2 };}hjKsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jIhhhK!hj*hhubh)}(hXM这样会使 PM_SUSPEND 和 PM_RESUME 成为位方式(bitwise)整数(使用"__force" 是因为 sparse 会抱怨改变位方式的类型转换,但是这里我们确实需要强制进行转 换)。而且因为所有枚举值都使用了相同的类型,这里的"enum pm_request"也将 会使用那个类型做为底层实现。h]hXU这样会使 PM_SUSPEND 和 PM_RESUME 成为位方式(bitwise)整数(使用”__force” 是因为 sparse 会抱怨改变位方式的类型转换,但是这里我们确实需要强制进行转 换)。而且因为所有枚举值都使用了相同的类型,这里的”enum pm_request”也将 会使用那个类型做为底层实现。}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK(hj*hhubh)}(h而且使用 gcc 编译的时候,所有的 __bitwise/__force 都会消失,最后在 gcc 看来它们只不过是普通的整数。h]h而且使用 gcc 编译的时候,所有的 __bitwise/__force 都会消失,最后在 gcc 看来它们只不过是普通的整数。}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hj*hhubh)}(h~坦白来说,你并不需要使用枚举类型。上面那些实际都可以浓缩成一个特殊的"int __bitwise"类型。h]h坦白来说,你并不需要使用枚举类型。上面那些实际都可以浓缩成一个特殊的”int __bitwise”类型。}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK0hj*hhubh)}(h)所以更简单的办法只要这样做::h]h(所以更简单的办法只要这样做:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hj*hhubjJ)}(htypedef int __bitwise pm_request_t; #define PM_SUSPEND ((__force pm_request_t) 1) #define PM_RESUME ((__force pm_request_t) 2)h]htypedef int __bitwise pm_request_t; #define PM_SUSPEND ((__force pm_request_t) 1) #define PM_RESUME ((__force pm_request_t) 2)}hjsbah}(h]h ]h"]h$]h&]jYjZuh1jIhhhK5hj*hhubh)}(hH现在你就有了严格的类型检查所需要的所有基础架构。h]hH现在你就有了严格的类型检查所需要的所有基础架构。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK:hj*hhubh)}(hX[一个小提醒:常数整数"0"是特殊的。你可以直接把常数零当作位方式整数使用而 不用担心 sparse 会抱怨。这是因为"bitwise"(恰如其名)是用来确保不同位方 式类型不会被弄混(小尾模式,大尾模式,cpu尾模式,或者其他),对他们来说 常数"0"确实 **是** 特殊的。h](hXS一个小提醒:常数整数”0”是特殊的。你可以直接把常数零当作位方式整数使用而 不用担心 sparse 会抱怨。这是因为”bitwise”(恰如其名)是用来确保不同位方 式类型不会被弄混(小尾模式,大尾模式,cpu尾模式,或者其他),对他们来说 常数”0”确实 }(hjhhhNhNubhstrong)}(h**是**h]h是}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 特殊的。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK