0

var=1 实际上与 var = 1 有何不同?这些差异在哪些语言中真正重要或不重要?

4

5 回答 5

4

在brainfuck中,两者都被忽略为评论。

在 sh 中,var=1设置var1whilevar = 1尝试var使用参数=和运行程序1

于 2012-12-02T05:35:18.813 回答
4

好吧,bash一个:

var = 1

尝试使用和参数运行var程序,同时:=1

var=1

设置var1。甚至还有另一种变体:

var= 1

它暂时设置var为空字符串并尝试运行1程序(运行var后恢复为原始值)。

而且,为了完整性:

var =1

它尝试var使用单个参数运行程序=1

于 2012-12-02T05:36:12.413 回答
1

读自:

链接1 链接 2

在以计算机编程语言编写的源代码中出现的空格(超出第一个空格字符)通常被忽略;这种语言是自由形式的

在计算机编程中,自由格式语言是一种编程语言,其中字符在程序文本中页面上的位置无关紧要。程序文本不需要像旧的打孔卡系统那样放在特定的列中,而且行尾通常是无关紧要的。空白字符仅用于分隔标记,没有其他意义。

大多数自由格式语言都源自 ALGOL,包括 C、Pascal 和 Perl。Lisp 语言是自由格式的,尽管它们并非源自 ALGOL。REXX 大多是自由格式的,尽管在某些情况下空白字符是连接运算符。SQL 虽然不是一种完整的编程语言,但也是自由格式的。

于 2012-12-02T05:36:50.683 回答
0

据我所知,“=”在大多数编程语言中表示“分配”。(编译器只是忽略空白)

'==' 和 '===' 在某些地方可能会有所不同,例如 javascript。

于 2012-12-02T05:37:15.863 回答
0

注意:在某些语言中var 本身就会有问题。例如,在 C# 中,它是一个保留关键字。所以也许x = 1会是一个更好的例子。此外,“=”在某些语言中是赋值运算符,在其他语言中是相等检查运算符。我没有担心这些问题,而是专注于不同的词汇处理流派。

我的一分钱值:

  • 在大多数 Algol 传统的编程语言(包括 C 及其后代)中,这样的空格不会产生影响。此类语言允许在没有句法(或语义效果)效果的情况下消除空格,只要这样做不允许形成多符号预定义运算符之一:so`3+4与 相同3 + 4x++-5与 相同x ++ - 5但不同x + + - 5

  • 在诸如 SML 之类的语言中,任何未被空格中断的(非字母数字)符号序列都是有效标识符:在此类语言中,3+4与 ( x++ - 4') 相同。 3 + 4x++-4x ++- 4') is not the same as

  • 在某些语言中,甚至类似的东西3+4也会被视为单个标记,即在语法上与 . 不同的东西3 + 4

  • FORTRAN 的早期版本有一个有趣的方法,它受到了批评,并作为粉碎航天器错误故事的基础。(更多内容见下文)。

  • 最后,一些语言,如 Miranda、Haskell 和 CoffeeScript,遵循 ISWIM 的传统并使缩进在语法上很重要。


以处理空白而臭名昭著的语言的一个例子是 Fortran(尽管大多数批评适用于该语言的早期版本;在这方面,后来的版本更像 Algol)。

一个有趣的故事是导致火箭(我听到的版本中的航天飞机)发生故障的错误,因为 FORTRAN 忽略了空格等 DO 10 I = 1.100(应该是DO 10 I = 1,100 - DO 是 FORTRAN 相当于其他语言中的内容)一个for循环)被解析为100对变量的赋值DO 10 I

FORTRAN代码行 DO 10 I = 1.100

显然确实发生了。编译器显然做了它应该做的事情,忽略空格并隐式声明然后分配 DO10I。值得注意的是,该程序在使用前实际上已经过测试。检测到错误,从而挽救了火箭,但破坏了未来的事实。火箭的消亡已被广泛报道,并已成为程序员民间传说的一部分。

报价来源:

http://www-users.cs.york.ac.uk/susan/cyc/p/fbug.htm


不同编程语言中的空白主题可能非常有趣:

http://c2.com/cgi/wiki?SyntacticallySignificantWhitespaceConsideredHarmful

引自这个非常有趣和有趣(以一种令人讨厌的方式)的来源:

人们一定想知道为什么总是使用空格作为分隔符。通过使用空格作为分隔符,它可以防止用户仅在其名称中包含空格,从而导致 CamelCase 和 EmbeddedUnderscore 圣战。考虑到,在 C 中,空格仅用于类型/范围信息。如果该语言选择了一种更像帕斯卡的方法来使用冒号,那么整个 HolyWar 就可以避免了。尽管

global, const, string: 空指针异常消息 = "发生空指针异常"

在我们看来可能看起来很陌生,它会避免一些令人讨厌的风格问题。特别是因为空格分隔似乎已经在整个 Unix 中传播,这使得与 win32 的兼容性(对文件名、SQL 表等中的空格没有疑虑)成为一件麻烦事。

在许多编程语言(C、C++、Lisp、Java、Forth 等,以及 HTML 等)中,空格的存在与否在语法上很重要(否则“foo bar”的含义相同像“foobar”)(标记分隔符)。(LISP 使用空格来分隔列表中的项目……而其他语言通常使用逗号。)但是,各种风格的空格(制表符、空格键、回车、换行符、CR/LF)和不同数量的空格都被视为相同“一些空白”。一个空格、三个空格、两个换行符、一个制表符——它们之间没有显着差异。

于 2012-12-02T06:24:53.943 回答