什么" uw"在STM32示例中的变量名称的开头是什么意思?

时间:2018-04-28 01:48:12

标签: stm32 freertos hungarian-notation

当我阅读STM32示例代码时,我看到了许多以uw开头的变量。例如:

static __IO uint32_t uwLsiFreq = 0;
__IO uint32_t uwCaptureNumber = 0;
__IO uint32_t uwPeriodValue = 0;
__IO uint32_t uwMeasurementDone = 0;

一切都有背后的意义或故事。 uw在这里意味着什么?

示例来源:STM32Cube_FW_F2_V1.7.0 / Projects / STM32F207ZG-Nucleo / Examples / IWDG / IWDG_Example / Src / main.c。
Download link - >点击"获取软件" " STM32CubeF2"旁边的按钮。

2 个答案:

答案 0 :(得分:2)

好吧,我想发表自己的,更完整的答案。感谢@njuffa在我的问题下面的评论中指出"可能:uw代表' unsigned word'某种Hungarian notation,"感谢@ PeterJ_01 pointing out,Stack Overflow的首席执行官对此事有一些看法,感谢@Sigve Kolbeinson在PeterJ_01的回答中指出Stack Overflow的首席执行官#39他的名字是乔尔·斯波尔斯基(在链接中找到),他实际上并不讨厌匈牙利的符号,而只是打乱了它的有限和腐败的形式[系统匈牙利语]有一段时间的牵引力,并给予我们实际的link to the article所以我们可以了解更多并自己阅读这篇文章。

1。以下是我回答我的问题的结论:

uw在许多STM32示例变量的开头肯定必须在逻辑上表示"无符号字,"其中一个"字"在这种情况下是32位。在阅读代码时,了解这一点会增加很多清晰度,并消除对名称的一些混淆,所以我很高兴知道这一点。

在这种情况下,这是一种系统匈牙利语用法,对于具有明确类型的语言(例如C和C ++),经常不鼓励这样做,因为它是多余的并且几乎没有增加值。将此与我在下面描述的 Apps匈牙利对比,Joel Spolsky(Stack Overflow的首席执行官)strongly promotes作为一种帮助使错误的代码看起来错误的方法。&#34 ;

2。这里有一些额外的见解(主要是关于匈牙利表示法)我从@Sigve和@njuffa那里学习了他们的评论和他们提供的链接:

您可以将此部分称为“#34;计算机编程中匈牙利符号究竟是什么?"

  1. Hungarian notation存在(之前我不知道),并且指的是在每个变量和/或函数名称的开头添加一些额外字符的概念,以提供有关变量或函数,例如目的类型返回类型
  2. 无意中,这也回答了我关于FreeRTOS命名约定的问题。现在我知道了!他们也使用[主要是系统]匈牙利表示法。这里有一些链接。请注意,在第一个链接中,您将看到FreeRTOS中所有匈牙利符号用法的列表。这种表示法几乎完全是系统匈牙利语表示法,但是当它们指定文件的名称时,也可​​以使用一些Apps匈牙利表示法,其中函数和宏在函数或宏名称内定义。
  3. 匈牙利表示法有两种主要形式:匈牙利系统匈牙利应用。查看他们的差异here
    • 系统匈牙利语基本上是对#34; Hungarian"当它的创造者Charles Simonyi错误地使用" type"而不是" kind"在他的描述中(source)。查尔的最初意图是将附加信息编码为变量名称,这些变量名称在编程语言本身中并不是固有的。但是, Systems Hungarian 表示法主要表示将变量的类型存储到变量名中。例如:unsigned long myVar现在变为unsigned long ulMyVar。大多数人似乎认为这是有限的使用或完全没有价值。 Joel Spolksy不是这种形式的匈牙利符号as indicated in his article的支持者,但他强烈 Apps匈牙利风格。其他意见可以在"Notable opinions" section of the Wikipedia article here中找到。
    • Apps匈牙利语描述了将附加信息存储在变量名称前面的概念,否则不能轻易推断出来,例如使用us来表示" nsafe s tring"和s表示"安全 s tring"。许多人要么对这种方法感到更加中立,要么喜欢并推广它。 Joel Spolsky(Stack Overflow的首席执行官)和Steve McConnel都认为这是一个好主意并促进其使用。
  4. 请注意,此处摘录自Joel's article

      

    有人在某处阅读过Simonyi的论文,在那里他使用了“type”这个词,并认为他的类型就像类一样,类似于类型系统,就像编译器所做的类型检查一样。他没有。他非常仔细地解释了“类型”一词的含义,但没有帮助。损坏已经完成。

         

    Apps匈牙利非常有用,有意义的前缀,如“ix”表示数组的索引,“c”表示计数,“d”表示两个数字之间的差异(例如“dx”表示“宽度”),依此类推。

         

    系统匈牙利语 远没有那么有用的前缀,如“l”表示长,“ul”表示“unsigned long”,“dw”表示双字,即实际上,呃,一个无符号长。在匈牙利语系统中,前缀告诉您的唯一内容是变量的实际数据类型。

         

    这是对西蒙尼的意图和实践的一种微妙但完全的误解......

    (强调补充)

答案 1 :(得分:1)

这意味着此命名约定中的无符号字。现在几乎没有用过。但有些人喜欢它,因为它向他们展示了变量的类型。另一个人讨厌这是最糟糕的编程习惯之一(包括Stack Overflow的创建者)。 IMO没关系