当前位置: 首页 > news >正文

为什么有些编程语言不建议用下划线作为标识符开头?标识符的特殊字符。为什么不指定编译生成文件名, 默认是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等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。


http://www.mrgr.cn/news/58210.html

相关文章:

  • Vue3 + Element Plus 封装文本超出长度显示省略号,鼠标移上悬浮展示全部内容的组件
  • QT-使用QSS美化UI界面
  • Django+Vue全栈开发旅游网项目首页
  • MoCoOp: Mixture of Prompt Learning for Vision Language Models
  • 【C++智能指针深度解析】std::shared_ptr、std::unique_ptr与std::weak_ptr的构造、原理及应用实战
  • 【STM32项目_1_基于 STM32 的智慧门禁系统】
  • 创新业态下金融头部机构在 FICC 平台建设上的思考与实践
  • 人工智能技术的应用前景及对生活和工作方式的影响
  • 晨辉考试抽签软件的两种注册方法之二:在线注册
  • WebView渲染异常导致闪退解决方案
  • 开放式耳机推荐千元左右有哪些?开放式耳机推荐品牌
  • 迅为3A6000_7A2000核心主板龙芯全国产处理器龙芯3A5000等龙架构处理器软件兼容
  • 绝绝子工具
  • Java每日面试题(前端Vue拓展)(day20)
  • Web大学生网页作业成品——抗击疫情网页设计与实现(HTML+CSS)(4个页面)
  • 时间数据可视化基础实验(南丁格尔玫瑰图)——Python热狗大胃王比赛前三名分析
  • mysql原理、部署mysql主从+读写分离、监控mysql主从脚本
  • 【傻瓜教程】阿里云图标引入自己的项目
  • 电动机的启动,制动及保护
  • 6 C语言编程基础:注释的重要性与使用
  • 【工具】新手礼包之git相关环境包括中文的一套流程{收集和整理},gitlab的使用
  • [专有网络VPC]高可用虚拟IP(HaVip)
  • 基于SpringBoot的时装购物系统【源码】+【论文】
  • 没有密码,如何取消Word文档的只读模式?
  • RJ45 网口--内部有/没有变压器的连接器
  • MySQL 之 索引