为什么有些编程语言不建议用下划线作为标识符开头?标识符的特殊字符。为什么不指定编译生成文件名, 默认是a.out?函数入口一定是main吗?
为什么有些编程语言不建议用下划线作为标识符开头?
- C/C++中两个下划线开头的标识符可能是预留给运行时库的保留字。写代码的时候,就建议最好不要用下划线开头的标识符,避免冲突。最怕的是,编译器没提示错误,运行时产生奇怪的结果。
- 但对于Java/C#而言,大部分情况下,这条规则并不适用。它们有更好地封装,哪怕下划线开头的变量也被限定在包或者类内部,不会和它们的运行时冲突。
需要特别注意的是,微软为C#保留了几个关键字,如__arglist, 不确定未来会不会明确当做关键字。比较安全的做法是,尽量不以下划线开头做标识符。
- 在Python中,下划线开头的标识符有特别的含义,单下划线开头代表protected类型,双下划线开头代表private,还有一些特定的方法例如__init__是系统定义的名字。
- 仓颉对此无特别约束。
标识符的特殊字符
- C/C++/ObjC不允许@和$作为标识符的一部分
- Java允许$作为标识符一部分,例如:C#允许@a作为变量。
- C#允许@作为标识符一部分。例如,Java允许$a作为变量。
- Java和C# 甚至可以复用关键字作为标识符,例如$for和@for.
- Python不允许@和$作为标识符
- JS和Java类似,可以用$.
- Swift允许用反引号包围作为标识符使用,关键字也适用:
let `class` = 1
print("class: \(`class`)")
也支持用一部分Emoji符号作为标识符,例如:
let 🌟 = 100
为什么不指定编译生成文件名, 默认是a.out?
在*nix系统上,a.out是assembler output的缩写,最早源于PDP-7平台没有链接器,默认编译源代码为汇编格式,即对应前面的"汇编输出". PDP-11才有链接器,编译输出默认名称依然没有改,就形成了历史。
函数入口一定是main吗?
不一定,只是一般给程序员的说法是入口是main. 从进程运行的角度,操作系统加载器会调用对应程序开始运行的准备库,最终调用用户层代码main函数作为入口。
VS中可以设定#pragma comment(linker,"/entry:new_main_entry")指定入口点。
若文章对您有帮助,欢迎关注。助您在编程路上越走越好!
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。