”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > C/C ++中未使用的变量:为什么以及如何?

C/C ++中未使用的变量:为什么以及如何?

发布于2025-02-06
浏览:380

Unused variables in C/C  : why and how? 为什么变量未使用

有很多原因导致未使用变量可能保留在代码库中。这些包括:

错误和错误

:未使用变量的最明显原因是有缺陷的代码。要么根本不需要该变量,因此可以删除,或者是必要的,但我们忘记了在某些关键点使用它。

重构:
    作为软件的编写和重新编写,可以删除代码的整个部分。然后,曾经对代码至关重要的变量,例如辅助计算的结果,可能会被抛在后面,未使用。
  1. 条件汇编:

    变量可能取决于预处理器阶段。标准示例是仅出于调试目的而定义的变量。您的代码可能包含一些表单

  2. const auto value = compute_some_value(); const auto value_for_comparison_only = compute_same_value_differy(); assert(value == value_for_comparison_only);

    如果您使用-dndebug编译,则编译器可能会警告您value_for_for_comparison_only从未使用过:的确,assert语句已被…没有。 如何检测未使用的变量

  3. 不同的编译器和警告级别设置可能会影响编译过程中是否没有使用变量。
  4. 例如,GCC和Clang具有-wunused -variable标志,它触发了有关未使用变量的警告。标志已经由-wall警告选项暗示,并且可以通过-wno -unused -variable关闭。 我的建议是始终使用-wall编译,然后选择性地将警告视为允许的。这将所有未使用变量的实例。

    如何不检测未使用的变量:属性

    虽然我们始终应启用尽可能多的警告,但在某些情况下,我们需要选择性地关闭有关特定未使用变量的警告。这样做的一种流行的方式是使其无效:
  5. 对象Unused_Object; (void)unused_object; void的演员阵容将变量的用法计数为(pro forma),因此不会发出任何警告。
    虽然删除了Unused_object未使用的警告,但如有预期,有一些改进的方法。我们希望具有明确的语义,以表示无用的对象。一种常见的方法是通过定义宏:

#定义未使用(x)(void)(x); // ... 对象Unused_Object; 未使用(unused_object);
const auto value = compute_some_value();
const auto value_for_comparison_only = compute_same_value_differently();
assert( value == value_for_comparison_only );
一个优点是,我们现在明确地传达了此变量的意图(或缺乏意图)。此外,如果我们决定清除未使用变量的代码,那么搜索它们要容易得多。

超越宏,我们有可变属性:语言c的本地或作为C/C编译器提供的语言扩展。例如,clang和GCC允许变量属性__Attribute __(((未使用))。 C 17支持[[MASE_UNUSED]]属性:

对象Unused_Object2 __attribute __(((unused)))= x; //应在声明后放置 [[MASE_UNUSED]]对象Unused_Object1 = X; //必须在声明之前放置

这些属性与编译器(以及我们)交流这些变量可能未使用,并且我们对此很好。

历史上,海湾合作委员会属性首先出现,是C和C中的编译器特定语言扩展。从C 17开始,属性是语言标准的一部分。但是,不仅拼写不同,而且标准和GCC扩展不同意将属性放置在哪里。

[[MASE_UNUSED]]属性将通过条件编译找到其大多数应用程序。例如,它是仅调试变量的自然属性。出于纯粹的美学原因,我个人更喜欢定义一个宏#define and_unused [[bays_unused]]。

__attribute __(((未使用))的优点是,如果代码中使用该变量,它实际上会警告您。它不是

,但

绝对从未使用过,现在使用变量会产生警告。

保留无用的东西

显然,未使用的变量频繁且重要,甚至足以保证自己的语言扩展。
Object unused_object;
(void)unused_object;
从比较中,评论未使用的变量是一个很好的策略?并非总是!在整个开发代码和调试阶段中,您会保留未使用的变量的原因。假设该变量是在过去版本的代码中使用的,也许您甚至还没有决定是否应该搁置或重新整合旧代码;含义:您不知道您是否可能再次需要未使用的变量。

可能有助于调试目的保留代码:


auto Unused_variable __attribute __(((unused))=复杂的_calculation(arg1,arg2,arg3);
const auto value = compute_some_value();
const auto value_for_comparison_only = compute_same_value_differently();
assert( value == value_for_comparison_only );
即使从未使用复杂的计算结果,将其围绕它构成了另一个失败点……这正是您在调试期间想要的。即使不是原本打算调试的目的,如果您决定再次需要它,则该程序初始化此变量也会有所帮助。

我希望这篇关于未使用变量的文章对您有用。

版本声明 本文转载于:https://dev.to/martinlicht/unused-variables-in-cc-why-and-how-4cm4如有侵犯,请联系[email protected]删除
最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3