确定系统制表符的停止长度

时间:2018-11-26 23:46:58

标签: c++ c file

我的问题: 我正在尝试处理文件的内容以发现错误,就像编译器一样(从技术上讲,我正在制作一个编译器,但这只是次要的细节)。我需要知道给定系统或平台上的制表位长度,以便正确计算字符列。但是,我看过的所有地方都没有给我办法来获取系统制表位的长度。我怎么能得到它,甚至有可能在每个系统上达到8?

我不想假定制表位是每8个字符,因为这对于每个系统来说似乎都是不同的,并且甚至可以在大多数系统上配置。而且我了解到,编辑器通常会定义制表位的长度,但是编译器不会,也不能使用编辑器来确定制表符的长度。所以...我该怎么办?

编辑: 因此,如果没有简单或实际的方式来确定制表符的长度(除了进行任意猜测),是否存在一种直观的方法来确定该长度,以使它在50%或更多的时间内是准确的?

3 个答案:

答案 0 :(得分:2)

我认为您误解了制表符的工作方式。制表符不等于'x'个空格,其中'x'对于平台是唯一的。制表符等于制表符。它们根本不同。要处理标签,字符为'\ t'。

答案 1 :(得分:2)

我想在这一点上我应该以合理的方式回答我自己的问题。感谢@ZDF和@Swordfish的评论。

我的解决方法是:

  • 提供编译器选项以专门设置制表位的长度。
  • 如果用户未定义,则使用将是编译器默认值的长度,并且在任何时候编译器需要打印某些内容时,请使用那么多的空格替换制表符。

使用此系统,即使它不能正确反映用户文件,我也可以进行准确的列计数。

答案 2 :(得分:2)

我认为,您应该(a)假定制表符是每8个空格,并且(b)甚至不要浪费任何时间使此可配置。

是的,有些人喜欢缩进,缩进不是8个空格的倍数。是的,有些文本编辑器可让您将制表符设置在8个空格之外。但是(再次,我认为),这些事实都没有改变\t字符的解释。如果某人希望缩进18个空格,则他们(和/或他们的文本编辑器)可以通过插入18个空格,两个制表符和两个空格(甚至一个制表符和10个空格)来实现。但是,他们应该去插入两个制表符,并声明它们是9个空格的制表符之类的东西。

因此,如果您编写的代码带有8个空格制表符,并且认为自己“重新配置”的人\t发现您的代码没有(也不能)分享这种信念,那么也许-也许-您会帮助说服那个人相信他们的愚蠢。 (这当然无济于事。但是我们总是可以希望的。)

(但是,是的,这是一个古老而华丽的辩论,可能永远无法解决,让每个人都满意。)