在字符串字面量中使用制表符是否是“不良实践”?

5
作为对《在 C 和 C++ 中是否必须转义制表符?》的跟进(请注意,我不是该问题的作者)。
我学到这种代码被认为是“不良实践”。评论似乎也在暗示同样的事情。然而,出于某种原因,标准允许这种欺骗性的行为,因此某人必须要么发现它没有害处,要么有用例可以使用它。
不转义制表符被广泛接受为“不良实践”吗?

可能没有人进行过调查,这已经是一种长期存在的不良实践,即使没有其他原因,也因为意外将制表符转换为空格会很容易破坏代码。我在我的代码计数器http://invisible-island.net/c_count/c_count.html中标记了这些问题。 - Thomas Dickey
6
一般来说,C语言不会试图保护程序员避免做傻事。允许这种情况比禁止更容易,且假定程序员知道自己在干什么。“医生,当我这样做时感觉很疼。——那就别这么做。” - CodesInChaos
我认为这是一种不好的做法,因为很容易将其误认为是几个空格。 - emlai
1
@CodesInChaos 这就是为什么我总是害怕那些只懂Python或C#的程序员。 - Iharob Al Asimi
1
@iharob:这个问题有点令人困惑,因为原来的问题标题是反过来的,但我认为他的意思是不转义表格字符是一种不好的做法。 - Lightness Races in Orbit
显示剩余6条评论
2个回答

6
在文字中使用制表符而不是转义字符('\t',"\t")是一种不好的做法,因为:
  • 读者不能立即意识到有一个制表符。结果:对代码的错误假设和错误更改(例如当需要调整代码输出的对齐方式时)。
  • 制表符扩展可能因编辑器而异。结果:阻碍团队合作和维护,因为不同的人可能看到不同的布局。
  • 最重要的是:某些编辑器在保存源文件时会将制表符转换为空格(使用配置的制表符扩展设置),从而摆脱这些嵌入式制表符。结果:未被注意或不需要的更改(例如:当团队成员使用此类编辑器并进行轻微编辑时,甚至不在此字符串中)。

1
@zenith 第二点使它成为一种不好的实践,因为它会阻碍团队合作和维护。例如:程序员A在字符串中嵌入制表符,使用8个制表位。程序员B必须维护代码,以4个制表位打开它,进行一些更改,移动行中制表符的位置。输出似乎突然错位了,所以他会添加另一个制表符等等... - Christophe
@Christophe:如果一个开发者会因为无关紧要的原因随意在字符串字面量中添加制表符,那他就是一个相当不称职的开发者!当然,这样的不称职的开发者确实存在。 - Lightness Races in Orbit
3
这是需要翻译的内容:@LightnessRacesinOrbit 就是这样:世界并不完美!我也不会责怪那个人:许多专业编辑器提供的制表符扩展功能表明,大多数人认为代码中使用制表符是为了缩进,而不是作为文字。没有人应该反对这种普遍思想;-) - Christophe
1
@Christophe:即使是那个假设也被打破了,因为自动将制表符缩进转换为恶劣的空格缩进是魔鬼的作品。 - Lightness Races in Orbit

3
我从未真正考虑过这个问题,但我无法想象将字面制表符视为一个好主意,因为你无法立即将它们与标准的空格区分开来。如果你由于某种特定原因需要在字符串文字中使用制表符,则写入\t更清晰明确,以便每个人都知道你的意图。
顺便提一下,仅仅因为标准允许而认为必须有一个好的用例是有些错误的。例如,标准允许我们声明裸指针,并编写new

1
你知道吗? 这个答案已经在原问题中给出。我不太确定为什么你必须重新提问它。 - Lightness Races in Orbit
1
简单。我不是专家,评论似乎说编译器会自动处理它。当有疑问时,请询问。这就是问答的工作方式,对吧? - Mast
@Mast:编译器会“处理”什么? - Lightness Races in Orbit
1
轻量级,之前的研究是我对两种语言的经验。我可以理解为什么不应该这样做,但过去我见过一些事情,我不能同意这是一个好的做法。因此,我自己发布了问题,而不是接受相关问题的评论作为答案,以防止错误陈述被错误地接受。 - Mast

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接