当我阅读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"旁边的"获取软件"按钮。
好的,我想发布我自己的,更完整的答案。感谢@njuffa在我的问题下面的评论中指出"可能:uw
在某种匈牙利符号中代表'无符号的单词'",感谢@PeterJ_01指出Stack Overflow的首席执行官对此事有一些意见,并感谢@Sigve Kolbeinson在PeterJ_01回答下的评论中指出Stack Overflow的首席执行官是Joel Spolsky(如链接所示), 他实际上并不讨厌匈牙利语符号,而只是对它的一种有限且损坏的形式感到不安[系统匈牙利语]在一段时间内获得了牵引力,并向我们提供了文章的实际链接,以便我们可以了解更多信息并自己阅读文章。
1. 这是我回答我的问题的结论:
uw
许多STM32示例变量的开头肯定在逻辑上意味着"无符号字",在这种情况下,"字"是32位。当我阅读代码时,知道这一点会增加很多清晰度,并消除了对名称的一些混淆,所以我很高兴知道这一点。
在这种情况下,这是一种匈牙利系统用法,对于具有显式类型的语言(如 C 和 C++),通常不鼓励这样做,因为它是多余的并且几乎没有增加价值。与此形成对比的是我在下面描述的匈牙利语应用程序,Joel Spolsky(Stack Overflow的首席执行官)强烈提倡帮助使"错误的代码看起来错误"的一种方式。
2. 以下是我通过@Sigve和@njuffa的评论和他们提供的链接从和那里学到的一些额外的见解(主要是关于匈牙利符号):
你可以把这一部分称为"计算机编程中的匈牙利符号到底是什么?
- 匈牙利语表示法存在(我以前不知道),指的是在每个变量和/或函数名称的开头添加一些额外字符的概念,以提供有关变量或函数的其他信息,例如其用途、类型或返回类型。
- 无意中这也回答了我关于 FreeRTOS 命名约定的问题。现在我知道了!他们也使用[主要系统]匈牙利符号。这里有一些链接。请注意,在第一个链接中,您将看到 FreeRTOS 中所有匈牙利语表示法用法的列表。这种表示法几乎完全是系统匈牙利语表示法,但可以说,当它们指定函数或宏名称中定义函数和宏的文件的名称时,也可以使用一点匈牙利语表示法。
- FreeRTOS 匈牙利语表示法
- 在创建或使用 FreeRTOS 任务中,V 和 X 是什么意思?
- https://www.freertos.org/FreeRTOS-Coding-Standard-and-Style-Guide.html#NamingConventions
- 匈牙利语符号有两种主要形式:系统匈牙利语和应用程序匈牙利语。在此处查看它们的差异。
- 系统匈牙利语本质上是对"匈牙利语"符号原始意图的破坏,当它的创造者查尔斯·西蒙尼(Charles Simonyi)在描述它时错误地使用了"类型"而不是"种类"一词(来源)。Charle的最初意图是将附加信息编码为变量名称,而变量名称并非编程语言本身固有的。但是,系统匈牙利符号基本上说将变量的类型存储到变量名称中。例如:
unsigned long myVar
现在变成了unsigned long ulMyVar
。大多数人似乎认为这要么用途有限,要么完全没有价值。Joel Spolksy不是这种匈牙利符号形式的支持者,正如他的文章中所指出的那样,但他强烈支持匈牙利风格。其他意见可以在维基百科文章的"值得注意的意见"部分找到。 - Apps 匈牙利语描述了将附加信息存储在变量名称前面的概念,否则无法轻易推断出这些信息,例如使用
us
表示">unsafestring",s
表示"safestring"。许多人要么对这种方法感到更中立,要么喜欢它并推广它。Joel Spolsky(Stack Overflow的首席执行官)和Steve McConnel都认为这是一个好主意,并促进了它的使用。
- 系统匈牙利语本质上是对"匈牙利语"符号原始意图的破坏,当它的创造者查尔斯·西蒙尼(Charles Simonyi)在描述它时错误地使用了"类型"而不是"种类"一词(来源)。Charle的最初意图是将附加信息编码为变量名称,而变量名称并非编程语言本身固有的。但是,系统匈牙利符号基本上说将变量的类型存储到变量名称中。例如:
请注意,这是乔尔文章中的有用摘录:
有人在某个地方读了Simonyi的论文,他使用了"类型"这个词,并认为他的意思是类型,就像类,就像在类型系统中一样,就像编译器所做的类型检查一样。他没有。他非常仔细地解释了他所说的"类型"这个词的含义,但这并没有帮助。损害已经造成。
匈牙利语应用程序有非常有用、有意义的前缀,例如"ix"表示数组的索引,"c"表示计数,"d"表示两个数字之间的差异(例如"dx"表示"宽度"),等等。
系统匈牙利语的前缀用处要小得多,比如"l"代表长,"ul"代表"无符号长","dw"代表双字,这实际上是一个无符号的长。在匈牙利语系统中,前缀告诉您的唯一内容是变量的实际数据类型。
这是对西蒙尼意图和实践的微妙但完全的误解......
(着重号后加)
在此命名约定中,它表示无符号的单词。 现在几乎不用了。但是有些人喜欢它,因为它向他们展示了变量的类型。另一个人讨厌争论这是最糟糕的编程习惯之一(包括堆栈溢出的创建者)。 海事组织没关系