在Visual Studio c 中,我定义了一系列的通道ID恒定,其小数为0到15。该代码运行的嵌入式上下文。
悬停在这些常数之一上时,我希望Intellisense向我展示常数的数值。相反,它向我展示了角色表示。对于某些非打印值,它显示了一个代表某些ASCII值的逃脱字符,而对于其他值则显示了该字符的八分值。
const uint8_t channelID_Observations = 1; // ' 01'
const uint8_t channelID_Events = 2; // ' 02'
const uint8_t channelID_Wav = 3; // ' 03'
const uint8_t channelID_FFT = 4; // ' 04'
const uint8_t channelID_Details = 5; // ' 05'
const uint8_t channelID_DebugData = 6; // ' 06'
const uint8_t channelID_Plethysmography = 7; // 'a'
const uint8_t channelID_Oximetry = 8; // 'b'
const uint8_t channelID_Position = 9; // ' ' ** this is displayed as a space between single quotes
const uint8_t channelID_Excursion = 10; // 'n'
const uint8_t channelID_Motion = 11; // 'v'
const uint8_t channelID_Env = 12; // 'f'
const uint8_t channelID_Cmd = 13; // 'r'
const uint8_t channelID_AudioSnore = 14; // ' 16'
const uint8_t channelID_AccelSnore = 15; // ' 17'
某些ESC的代码很容易识别,并且十六进制或十进制等效物很容易记住(n == newline == 0x0A)
,但其他的更晦涩。例如,小数7显示为" a",在某些系统中代表ASCII BEL字符。
某些表示对我来说是神秘的 - 例如,十进制9将是ASCII选项卡,今天通常以" t"为" t",但是Intellisense将其显示为空格字符。
为什么无论我如何尝试将其定义为数字值,为什么8位未签名的整数总是被视为角色?
为什么只有一些,但不是所有这些字符作为其ASCII等效的逃脱符号,而其他人则获得了八分代表示?
使用的模糊符号的起源是什么?例如,小数7的" a"匹配ISO定义的Control0集,该集合具有Unicode表示形式 - 但是小数点应显示" t"。
有什么方法可以使IntelliSense Hover Tips向我展示此类常数的数值,而不是字符表示?装饰?vs设置?Typedefs?#defines?
您正在误读Intellisense。0x7 =' a'不是字面char'a'。' a'是铃铛/警报。
请参见有关逃生序列-https://en.wikipedia.org/wiki/escape_sequences_in_ctege/p>
'a'
的文章。如果将0x07
分配给uint8_t
,则可以确保编译器不会将该分配更改为其他内容。IntelliSense仅以另一种方式表示值,它不会改变您的值。
另外, 'a'
具有0x61的值,这可能就是绊倒您的原因。
一年多后,我决定记录我在进一步追求时发现的东西。djgandy的答案中暗示了正确的答案,该答案引用了Wikipedia,但我想明确。
除一个值(0x09(外,Intellisense似乎确实可以始终如一地处理这些值,并且该处理植根于权威来源:我的常数是是"字符构成" 根据C11语言标准(第6.4.4节(。
对于不映射到可显示字符的字符常数,第6.4.4.4节将其语法定义为
6.4.4.4字符常数
语法
。。。
:: Simple-Escape-Sequence:
之一'
"
??
\
a
b
f
n
r
t
v
:: octal-escape-sequence:
八分位数
八分位数八达数字
八位数八位数八分位数
在C语言定义第5.2.2节中进一步定义了"逃生序列":
§5.2.2字符显示语义
2(字母表逃脱序列表示代表非图字符 执行字符集旨在显示显示的动作 设备如下:
a (警报(产生听觉或可见警报 不改变主动位置。
b (Backpace(将活动位置移至上一个位置 当前线。如果主动位置在初始位置 线路,显示设备的行为未指定。
f (表格feed(将活动位置移至初始位置 下一个逻辑页面的开始。
n (新线路(将活动位置移至初始位置 下线。
r (电托返回(将活动位置移至初始位置 当前行。
t (水平标签(移动活动位置 到当前线上的下一个水平制表位置。如果是 主动位置在最后定义的水平制表处或超过 位置,未指定显示设备的行为。
v (垂直选项卡(将活动位置移至初始位置 下一个垂直制表位置。如果主动位置在或 过去定义的垂直制表位置, 显示设备未指定。
3(这些逃生序列中的每个 实现定义的值,可以存储在单个字符中 目的。文本文件中的外部表示不必 与内部表示形式相同,并且不在范围之外
的国际标准
因此,IntelliSense掉落的唯一位置是在0x09的处理中,应显示为
' t'
,但实际上显示为
''
那么这是什么呢?我怀疑Intellisense认为一个选项卡是可打印的字符,但以其格式抑制了Tab Action。在我看来,这与C和C 标准不一致,并且与其他逃生角色的处理也不一致,但是也许有一些理由可以"逃脱" Me:(