【问题标题】:Is there a static analyzer can check local variables re-assignment in C/C++/Objective-C?是否有静态分析器可以检查 C/C++/Objective-C 中的局部变量重新分配?
【发布时间】:2012-08-08 10:45:04
【问题描述】:

有没有什么方法(例如编译器标志)可以在没有 C/C++/Objective-C 中的说明符的情况下自动设置 ALL 局部变量 const?就像函数式语言中的 let 语义一样。

因为我想将const 设置为所有局部变量,但这太烦人了,并且使代码的可读性降低。如果我可以默认设置所有局部变量const,并且我可以手动设置一些变量mutable,那对我来说会很棒。但我从来没有听说过。

如果你知道什么,请告诉我。


编辑

在阅读回复后,我对此进行了更多思考。而且我强烈同意它会破坏强大的 C 约定(或标准?),因为它已经被默认定义为可变的。

所以我的想法变成了另一种形式。一种静态分析器。不是编译器。 如果某些工具可以检查重新分配的局部变量,并且可以定义任何标记可变变量的机制(例如,特定的空预处理器符号),那么它对我来说将是完美的工具。而且,它不会破坏 C 约定。

所以我稍微更改了问题标题并添加了这段文字。

【问题讨论】:

  • 出于好奇 - 为什么需要它?你赢什么?另外,我看不出这如何使代码更具可读性,隐藏了const
  • 这不会给你带来很多麻烦吗,比如循环计数器?
  • 想象一下偶尔的读者看到你的程序会有多么有趣:)
  • “因为我想把所有局部变量都设置成 const,但是太烦人了,代码可读性差。” - 这可能很烦人。但是,它是如何降低代码的可读性的呢?当您添加明确的“const”关键字时,代码似乎更具可读性。
  • @Eonil - 如果现在从头开始,这可能是语言 的设计方式,默认为 const 并在明确要求时为 mutable/var。但这并没有发生,所以答案是 - 不,我知道没有编译器支持。

标签: c++ objective-c c constants local-variables


【解决方案1】:

... errr 通过使用宏来实现:

int main () {

 #define int const int
 #define float const float

 int x = 5;
 float y = 5.3;

 #undef int
 #undef float

 return 0;
}

您甚至可以将这些 def 和 undef 分成两个不同的标头,这样您的代码看起来会更干净一些:

int main () {

 #include "all_vars_const_begin.h"

 int x = 5;
 float y = 5.3;

 #include "all_vars_const_end.h"

 return 0;
}

但我不确定这种风格是否可以。

【讨论】:

  • 这也会为您在这些宏之间调用的任何函数添加常量,所以这可能是个坏主意。
  • 同意。如果可能的话 - 函数调用必须移出这个宏范围。或者这样的函数必须以#include "all_vars_const_end.h"- 开头,这当然会造成很多代码混乱。
  • 好主意,除了这不是自动的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多