前言

按照编程界的惯例,学习一门语言第一件事就是输出“Hello World”,这大概是专属程序员的情节(类似格子衫和植发)。

以下就是各个主流编程语言的 HelloWorld 写法,为什么要列出各个语言的 HelloWorld?我们比较他们的不同之处,从中学到语言设计哲学和编程理念。

网上各个入门教程中只会告诉你 HelloWorld 的每一行代码是什么意思,然后你一脸懵逼,为什么要这么写,为什么要引入包,而你的疑问得到的解答可能是以后学到了你就明白了。等你学完后上手实践一段时间你确实明白,开头要引入包,Java 要写 Class,你认为你明白了,但是你真的理解每一行代码后面得编程理念吗?

示例

C

 1
 2
 3
 4
 5
 6
 7
 8
 9
10

#include <stdio.h>

int main(void)
{

   printf("Hello, World! \n");

   return 0;
}

Go

1
2
3
4
5
6
7
8
9
package main

import "fmt"

func main() {

    fmt.Println("Hello, World!")

}

Java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import static java.lang.System.out;

public class HelloWorld {

    public static void main(String[] args) {

        System.out.println("Hello World");

    }
}

PHP

1
2
3
<?php

echo "Hello World!";

Python

1
2

print("Hello, World!")

说明

以上主流编程语言大部分人都接触过,前 3 种都是编译型语言,后 2 种是解释型语言。

我们观察下前 3 种第一行,Java 和 Go 都有 import xx,C 有include,都是包含、引入的意思。

编程语言中,不同功能划分到不同模块中去,字符串、网络、http 等等,在不同的编程语言有不同的命名。Java 和 Go 中叫包,C 语言叫头文件。设计包目的是降低代码耦合度,提高代码复用性和可维护性。假设你要处理字符串,就只要在字符串的包中查找对应的方法。

为什么 PHP 和 Python 没有 import 包呢,因为它们为了提高开发者开发效率,把很多函数在语言内部实现了,你可以直接调用。

两者孰优孰劣,后面我们在讲编译型语言和解释型语言时会详细分析。

代码解析

第一行

1
2

#include <stdio.h>

C 语言后缀名 h 的文件就是头文件,它包含了函数声明和定义,没有具体实现的代码。

这句话的意思是你不用管也不用看这个方法怎么实现,代码细节是什么。你只需要按头文件中指定的函数的名字,传入的参数,返回的结果调用。

为什么要这样?比方说 A 写的函数 a 调用 B 写的的一个方法 b,

  • a 直接依赖 b,如果 B 修改了 b 的返回结果类型,a 也需要修改。
  • a 依赖 b 的头文件,b 修改返回结果类型后,为了兼容头文件,内部转换成头文件定义的返回类型,a 就不需要修改。

第二行

1
2
3
4
5

int main(void)
{

}

C 语言程序都需要包含 main() 函数, 代码从 main() 函数开始执行。main 函数就是进入一个房间的大门,所有函数执行的起点。Go 和 Java 也是这样设计的。

为什么需要 main 函数?一个文件中可以定义多个函数,编程语言怎么知道要从哪个开始执行呢?就像进入一个房间,肯定要先找大门,从门进入(别抬杠走窗户)。

int是函数的返回值数据类型关键字,每个函数都要定义返回值类型,如果类型不符合要求,编译就无法通过,无法执行。有些函数执行所需的操作而不返回值,在这种情况下,关键字是void

main是函数名,文件中函数名不能重复。

void是参数,当函数被调用时,向参数传递一个值,这个值被称为实际参数。如果函数不包含参数,就传入void

第三行

1
2

printf("Hello, World! \n");

printf 用于格式化输出到屏幕。printf() 函数在 "stdio.h" 头文件中声明。

第四行

1
2

return 0;

用于表示退出程序。在程序逻辑执行完后,如果返回类型不是void,就必须返回指定类型数据,这里要求必须返回int类型数据,就返回0

总结

在介绍 C 语言 HelloWorld 后,和其他语言 HelloWorld 比较。介绍了语言本身的设计理念。详细解释 HelloWorld 中每一行代码的意义。万丈高楼平地起,这还只是学习 C 语言的第一步。

与君共勉。

微信公众号

扫码关注

加好友深入交流,解答问题。