0

当我阅读 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。
下载链接--> 点击“STM32CubeF2”旁边的“获取软件”按钮。

4

2 回答 2

2

好的,我想发布我自己的更完整的答案。感谢@njuffa 在我的问题下方的评论中指出“可能:uw代表某种匈牙利符号中的'未签名单词' ”,感谢@PeterJ_01指出Stack Overflow 的首席执行官对此事有一些看法,并感谢@Sigve Kolbeinson 在 PeterJ_01 的回答下的评论中指出 Stack Overflow 的 CEO 的名字是 Joel Spolsky(如链接中所示),他实际上并不讨厌匈牙利符号,而只是对有限的它的损坏形式 [Systems Hungarian] 获得了一段时间的关注,并为我们提供了文章的实际链接,以便我们可以了解更多信息并自己阅读文章。

1.这是我回答我的问题的结论:

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

在这种情况下,这是系统匈牙利语的一种用法,对于具有显式类型的语言(例如 C 和 C++)通常不鼓励使用,因为它是多余的并且几乎没有增加价值。将其与我在下面描述的Apps Hungarian进行对比,Joel Spolsky(Stack Overflow 的首席执行官)大力宣传它是一种帮助“错误代码看起来不正确”的方法。

2. 以下是我从@Sigve 和@njuffa 通过他们的评论和他们提供的链接学到的一些额外见解(主要是关于匈牙利符号):

您可能只是将此部分称为“计算机编程中的匈牙利符号到底是什么?”

  1. 存在匈牙利符号(我以前不知道),是指在每个变量和/或函数名称的开头添加一些额外字符的概念,以提供有关变量或函数的附加信息,例如其用途,它的类型,或者它的返回类型
  2. 无意中这也回答了我关于 FreeRTOS 命名约定的问题。现在我知道了!他们也使用[主要是系统]匈牙利符号。这里有一些链接。请注意,在第一个链接中,您将看到 FreeRTOS 中所有匈牙利符号用法的列表。这种表示法几乎完全是 Systems Hungarian 表示法,但是当他们指定在函数或宏名称中定义函数和宏 的文件的名称时,可以说也使用了一点 Apps Hungarian 表示法。
  3. 匈牙利符号有两种主要形式:Systems HungarianApps Hungarian在这里查看它们的差异。
    • Systems Hungarian本质上是对“匈牙利”符号的原始意图的破坏,该符号的创建者查尔斯西蒙尼在他的描述中错误地使用了“类型”一词而不是“种类”(来源)。Charle 的初衷是将附加信息编码为编程语言本身不固有的变量名。但是,Systems Hungarian表示法基本上表示将变量的类型存储到变量名中。例如:unsigned long myVar现在变成unsigned long ulMyVar. 大多数人似乎认为这是有限的使用或完全没有价值。Joel Spolksy不支持这种形式的匈牙利符号,,但他强烈支持Apps Hungarian 风格。其他意见可在此处的 Wikipedia 文章的“重要意见”部分中找到
    • Apps Hungarian描述了将附加信息存储到变量名称前面的概念,否则这些信息不容易推断出来,例如us用于表示“不安全字符串”和s表示“安全字符串”。许多人要么对这种方法感到更中立,要么喜欢并推广它。Joel Spolsky(Stack Overflow 的 CEO)和 Steve McConnel 都认为这是一个好主意并推广它的使用。

请注意,这是Joel 文章的有用摘录:

有人在某处读过 Simonyi 的论文,他在其中使用了“类型”一词,并认为他的意思是类型,就像类,就像在类型系统中一样,就像编译器所做的类型检查一样。他没有。他非常仔细地解释了他所说的“类型”这个词的确切含义,但这并没有帮助。损害已经造成。

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

系统匈牙利语前缀用处不大,例如“l”代表 long,“ul”代表“unsigned long”,“dw”代表双字,实际上,呃,一个 unsigned long。在 Systems Hungarian 中,前缀告诉您的唯一信息是变量的实际数据类型。

这是对西蒙尼的意图和做法的微妙但完全的误解……

(重点补充)

于 2018-04-29T22:25:06.840 回答
1

在此命名约定中,它表示无符号字。现在几乎不用了。但是有些人喜欢它,因为它向他们展示了变量的类型。其他人讨厌争论这是最糟糕的编程习惯之一(包括 Stack Overflow 的创建者)。海事组织没关系

于 2018-04-28T06:50:56.227 回答