编译原理 - 代码行,块界定

问题

  • 以下代码输出是什么?
if (1) 
printf("1"),
printf("2"),
printf("3");
  • 众所周知if语句没使用 大括号的话作用域只有一行,怎样算一行?问题的本质是:对于编译器而言如何界定代码行和代码块?
  • 不管是编译型语言还是解释型语言,处理的对象(代码)都是字符串形式的,编译器和解释器处理代码时是如何界定的一行代码和一块代码?
  • 编译器和解释器并不一定是按照人的思维方式去界定的代码行和代码块。

问题的意义

  • 对于编译器,需要站在人类的角度,才能对程序员更友好,接近于人类习惯,更容易理解。
  • 对于人类,需要站在编译器的角度,才能理解编译器做了什么,程序是怎么运行的。

编译器 (c/c++ 编译器)

  • 上面代码会打印123,编译器将所有printf都认为是一行了。
  • 结论:对于c/c++ 编译器,一行代码并不是人类眼里的一行代码,编译器并不是以换行符为一行的结束符,编译器是以 ;为一行的结束符,代码中的空格,换行都会被临时删除。

解释器 (python 解释器)

  • 对于python解释器,它是以代码中换行符作为一行的界定符,因此它更符合人类的书写习惯,正是因为如此,python对代码的代码的书写格式要求较高,该换行的需要换行,该空格的一定要按标准空格。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值