Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何检测未使用的宏定义&;typedefs?_C++_C - Fatal编程技术网

C++ 如何检测未使用的宏定义&;typedefs?

C++ 如何检测未使用的宏定义&;typedefs?,c++,c,C++,C,通过链接器反馈很容易得到一个未使用的函数和变量列表,但是如何检测那些未使用的宏定义&typedef?在整个项目中,我必须逐行浏览代码吗?< /P> < P>静态分析工具,C和C++程序可能包括检查未使用的预处理器宏。 例如,请参见 另一种可能是进入特定的include文件,使用#ifdef 0删除宏的大部分,然后使用一种分治算法检查编译器错误 但是,随着源代码变得越来越大,我认为静态分析工具将是更好的方法。对于未使用的宏,您可能需要看一看。它具有可能有助于完成此任务的选项。从: 在给定配置下,活

通过链接器反馈很容易得到一个未使用的函数和变量列表,但是如何检测那些未使用的宏定义&typedef?在整个项目中,我必须逐行浏览代码吗?< /P> < P>静态分析工具,C和C++程序可能包括检查未使用的预处理器宏。 例如,请参见

另一种可能是进入特定的include文件,使用
#ifdef 0
删除宏的大部分,然后使用一种分治算法检查编译器错误


但是,随着源代码变得越来越大,我认为静态分析工具将是更好的方法。

对于未使用的宏,您可能需要看一看。它具有可能有助于完成此任务的选项。从:

在给定配置下,活动预处理器指令中会出现哪些符号

(如果预处理器指令不在任何false#if的范围内,则该指令处于活动状态)。再次假设您对C-source in应用程序感兴趣,您可以使用以下命令显示这些符号的列表,包括文件名和行号:

$>coan符号--递归--定位--活动--一次--筛选c,h应用程序

它可以选择删除条件性的代码块(
#if 0
和friends),以及许多其他用于处理C预处理器的有用特性。我会用它来收集所有的
#define
d符号和所有
#ifdef
定义的
符号和朋友。我会对这两组符号进行排序和统一,并将它们区分开来。这是一个很好的定位打字错误的方法。然后,我会把它们分别列成柱状图,从最不频繁的开始,一路往上爬


对于未使用的typedef,这是另一个挑战。您可以使用诸如或之类的交叉引用类型程序,但这不是非常自动的。

对于源文件中定义的宏,您可以尝试使用
-Wunused macros
gcc/clang flag。 在gcc中还有
-Wunused local typedefs

在以下位置有cscout(现在是开源的):


查找未使用的“extern”#define

编译器不能这样做,因为它在预处理器之后运行。我想除了浏览代码和grepping之外的解决方案是使用给定宏和不使用给定宏运行
gcc-E
,然后比较结果。如果它们相同,则宏在代码中未使用。“不过,可能有更好的方法来做这件事。”埃里克·芬恩,一开始我觉得这听起来并不坏。不过,我知道这对于大型代码库是不可行的。只有在某些特定配置中内置时,才能定义某些宏。例如,
\u WIN\u VER
可能仅在针对Windows时才设置。PC-Lint是每个专业开发人员的计算机中都应该使用的一个很好的工具。除了数百万从不接触Windoze的开发人员之外。Flexlint是PC-Lint的替代品。