C语言圣经学习心得 1.1 Hello World

第一个程序:打印Hello World

作者在书中的程序为:

注意,这种旧式的main()函数声明在旧的C标准中是合法的,但在现代的C标准中已经不再建议使用,在某些编译器中可能会警告或报错。下面会提到标准的写法。

作者举了在UNIX 操作系统中编译运行程序的例子,我在与UNIX类似的Linux系统中演示了这一过程:

1.在文件夹中使用vim创建hello_world.c文件

2.输入代码内容,完毕后按esc,然后输入:wq即可保存退出:

3.输入命令行gcc hello.c,完成编译,此时文件夹中出现一个可执行文件a.out.

4.输入命令行./a.out,程序运行,打印出Hello World。

Tips:

  1. main是一个特殊的函数名,不能随意更改。每个程序都从main函数开始执行,这意味着每个程序都必须在某个位置包含一个main函数。
  2. 许多C 语言程序的开始处都有#include <stdio.h>,因为它包含标准输入/输出库的信息,例如printf ()就是一个用于打印输出内容的库函数。
  3. 用双引号括起来的字符序列称为字符串或字符串常量,如"hello, world\n"就是一个字符串。其中\n是一种转义字符,意思是换行。printf函数不会自动换行,打印时要注意。除此外。除此之外C 语言常用的转义字符:\t 表示制表符;\b 表示回退符;\"表示双引号。

拓展知识:

1)C语言文件后缀为.c,需编译后运行。C语言编译生成可执行文件的过程步骤一般包括:

  1. 预处理(Preprocessing):编译器会处理c语言源文件中的预处理指令,如#include和#define。预处理器会将这些指令展开并生成一个中间文件,通常以.i为扩展名。
  2. 编译(Compilation):编译器会将预处理后的中间文件转化为汇编代码。汇编代码是一种与硬件架构相关的低级代码,通常以.s为扩展名。
  3. 汇编(Assembly):汇编器将汇编代码转化为机器代码——计算机能够直接执行的二进制指令。这一步骤生成的文件通常以.obj或.o为扩展名。
  4. 链接(Linking):最后,链接器将所有的目标文件(.obj或.o文件)和所需的库文件链接在一起,生成最终的可执行文件。最终生成的可执行文件通常以.exe(在Windows系统上)或没有扩展名(在类Unix系统上)为扩展名。

2)在代码中引用头文件或链接到某个库时,有时会遇到使用相对路径还是绝对路径的问题。举个例子,新建一个项目,目录结构如下:

/my_project

    |- src

        |- main.c

    |- include

        |- my_header.h

    |- lib

        |- my_lib.a

如果你要在main.c文件中引用my_header.h头文件,可以使用相对路径

#include "../include/my_header.h"

这里的..表示返回到src目录上一级,然后进入include目录,找到my_header.h头文件。

如果要链接my_lib.a库文件,Linux中使用命令行编译时的相对路径如下(假设你在src目录下进行编译):

gcc main.c -o my_program -L../lib -lmy_lib

-L../lib告诉编译器在../lib目录中查找库文件,-lmy_lib告诉它链接my_lib.a库。

如果你选择使用绝对路径,就要提供完整的文件路径,例如:

#include "/path/to/my_project/include/my_header.h"

gcc main.c -o my_program -L/path/to/my_project/lib -lmy_lib

绝对路径确保无论在哪个位置运行代码,都能找到所需的文件或库,但它们通常不太便于移植和分享,因为路径可能在不同的计算机上不同,可能导致找不到文件从而编译失败。相对路径更加灵活且容易移植,尤其适合在不同计算机上的合作项目。

3)我在Linux的c程序中使用了标准的int main(int argc, char* argv[])函数写法,main函数有一个明确的返回值类型 int,在函数结束时返回0,表示程序正常退出。传入的参数作用如下:

  1. argc(argument count)是一个整数,表示传递给程序的命令行参数的数量,包括程序名称本身。argv[](argument vector)是一个指向字符串数组的指针,每个字符串都代表一个命令行参数。argv[0]通常是程序的名称,argv[1]是第一个命令行参数,以此类推。
  2. 如果程序不需要命令行参数传入,你可以写int main(void) 来表示不接受参数。但在Linux中,这种允许传入命令行参数的main函数非常有用。下面是一个具体的例子:
  3. 在Linux中编写一个简单的计算器程序,可进行加法减乘除,可通过命令行输入两个数字和一个运算符,然后程序将根据命令行执行计算。你可以使用命令行参数来实现这个功能:

gcc编译完成后,输入./calculator 5 + 3 即可得到计算结果,此命令行将被作为参数传入main函数。./calculator 是可执行文件的名称,它被视为第一个参数,也就是 argv[0];5 是第二个参数 argv[1];+ 是第三个参数argv[2];3 是第四个参数argv[3] 。所以,main 函数中代表参数数量的 argc 将被设置为 4,表示有四个命令行参数(包括程序名称),而 argv []是一个指向字符串数组的指针,包含以上四个参数的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值