在这两种语言中,基本的源字符集包括除了@
、$
和`
之外的所有可打印ASCII字符。我可以理解为什么不使用重音符号,因为它并不总是被解释为单独的字符,并且它看起来非常类似于撇号。但是是否有特定的原因导致@和$没有任何用途呢,还是说语言设计者只是没想到如何使用它们呢?:)
在这两种语言中,基本的源字符集包括除了@
、$
和`
之外的所有可打印ASCII字符。我可以理解为什么不使用重音符号,因为它并不总是被解释为单独的字符,并且它看起来非常类似于撇号。但是是否有特定的原因导致@和$没有任何用途呢,还是说语言设计者只是没想到如何使用它们呢?:)
我无法想象它们会占用多少容量。也许可以使用@表示指针...
但是$和@是非常繁忙的符号,可能会分散注意力,如果你将它们与已经多样化的语法混合使用,只是因为它们存在,你最终可能会得到一种类似于perl正则表达式的语言。这意味着它根本无法阅读。:P
$
后面跟着八个数字一定很爽。 :P - Anne Quinn@符号是个坏主意,因为它是删除字符。如果你在程序中输入时不小心按到@,那么你会把此前输入的整行都删掉。
#符号也差不多是个坏主意,因为它是擦除字符。如果你在程序中输入时不小心按到#,那么你会把最近输入的一个字符删掉。
当预处理器被添加到C语言中时,#可以在行首使用,但不能在其他位置使用。因此,也许ed被修改了,允许#作为行首的第一个字符输入,因为前面没有字符需要被擦除。
那么,为什么预处理器没有使用$代替#呢?我回答了你问题的一半,但又增加了另一半的答案。
过去报纸文章中没有@字符。在互联网普及之后,一些记者或编辑在报纸文章中放置了4个字符的字符串“(at)”,因为他们无法或不愿使用某些转义序列来将实际的@放入文章中。Unix中的kill字符@的定义是从新闻设备中复制过来的。
http://en.wikipedia.org/wiki/Seventh_Edition_Unix_terminal_interface
为什么不
至少在MSVC和GCC中,$
作为有效标识符得到支持。
以下代码在两者中都可以编译:
struct $Y1$
{
void $Test$() {}
};
int main()
{
$Y1$ $x$;
$x$.$Test$();
return 0;
}
我没有看到它们被使用的任何特定原因。
我的意思是,也许像Perl中一样,$
和@
可以用来表示标量和数组,但是为每个变量名称添加一个字符的好处很少。
此外,在C中,数组实际上只是指针的语法糖,因此它们可以在某种标量上下文中使用。
也许它们可以像其他有效字符一样允许在变量名中使用。
或者也许原因只是因为他们没有考虑过,因为真的没有理由把它们放进去。
去问K&R吧 :)
@
在 Objective-C 中使用,它是 C 语言的严格超集,如果 C 语言使用@
将会出错。至于$
,我不清楚。你认为它们应该被使用吗? - Danielvi
编辑器是在C
语言时代发现的。在vi
编辑器中,实际上$
符号内部通知了行尾的含义(尽管它没有被显式地使用)。然而,@
可以有一些很好的用途;它应该已经存在于该语言中。 - iammilind