《Linux C编程一站式学习》——第一个程序

2021/9/18 7:08:00

本文主要是介绍《Linux C编程一站式学习》——第一个程序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Ⅰ        C语言入门

第 1 章 程序的基本概念

4. 第一个程序

1.打印Hello World

        1)编写程序:

#include <stdio.h>

/* main: generate some simple output */

int main(void)
{
	printf("Hello, world.\n");
	return 0;
}

        2)将这个程序保存成main.c,然后编译执行:

$ gcc main.c
$ ./a.out
Hello, world.

(备注:gcc是Linux平台的C编译器,编译后在当前目录下生成可执行文件a.out,直接在命令行输入这个可执行文件的路径就可以执行它)

        3)如果不想把文件名叫a.out,可以gcc-o参数自己指定文件名

$ gcc main.c -o main
$ ./main
Hello, world.

2.程序分析

        1)程序主体的int main(void){...return 0;}结构,这些部分暂不详细解释,现只需把它们看成是程序按惯例必写的部分(Boilerplate)

        2)注意main是一个特殊的名字,C程序总是从main里的第一条语句开始执行,在此程序中是指printf语句

        3)注释

  /* ... */结构是一个注释(Comment),其中可写一些描述性的话,解释这段程序在做什么。注释只是写给程序员看的,编译器忽略从/**/的所有字符,故写注释没语法规则,爱怎么写就怎么写,且不管写多少都不会被编译进可执行文件中

        4)printf函数

        printf语句作用是把消息打印到屏幕。注意语句末尾以英文分号;(Semicolon)结束,下一条语句return 0;也是如此

        5){}括号

        C语言用{}括号(Brace或Curly Brace)把语法结构分成组,在上面的程序中printfreturn语句套在main的{}括号中,表示它们属于main的定义之中

        6)缩进

        printfreturn语句相比main那一行都缩进(Indent)了一些,在代码中可以用若干个空格(Blank)和Tab字符来缩进,缩进不是必须的,但它使我们更易看出这两行是属于main的定义之中的,要写出漂亮的程序必须有整齐的缩进

        7)错误提示(error)

        编译器对语法错误毫不留情,若程序有一点拼写错误,如第一行写成了stdoi.h,在编译时会得到错误提示:

                (1)代码:

#include <stdoi.h>

/* main: generate some simple output */

int main(void)
{
	printf("Hello, world.\n");
	return 0;
}

                (2)错误提示

$ gcc main.c
main.c:1:19: error: stdoi.h: No such file or directory
...

意思是“在main.c程序第1行第19列,错误,没有stdoi.h这样的文件或目录”

        8)警告(warning)

        如把上例中的printf("Hello, world.\n");改成printf(1);然后编译运行:

                (1)代码:

#include <stdio.h>

/* main: generate some simple output */

int main(void)
{
	printf(1);
	return 0;
}

                (2)警告信息:

$ gcc main.c
main.c: In function ‘main’:
main.c:7: warning: passing argument 1 of ‘printf’ makes pointer from integer without a cast
$ ./a.out 
Segmentation fault

                (1)警告信息是说”传递参数1的' printf '将指针从整数转换为不带强制转换的整数”,上面的程序运行时出了一个段错误,这属于运行时错误。

                (2)警告信息不是致命错误,编译仍然可以继续,如果整个编译过程只有警告信息而没有错误信息,仍然可以生成可执行文件。

                (3)警告信息不容忽视,出警告信息说明程序写得不够规范,可能有Bug,虽能编译生成可执行文件,但运行结果往往不正确

                (4)各种警告信息严重程度不同,像上面的警告几乎一定表明程序中有Bug,而另外一些警告只表明程序写得不够规范,一般还能正确运行,有些不重要的警告信息gcc默认是不提示的,但这些警告信息也有可能表明程序中有Bug

                (5)好习惯:打开gcc的-Wall选项,也就是让gcc提示所有的警告信息,不管是严重的还是不严重的,然后把这些问题从代码中全部消灭

如把上例中的printf("Hello, world.\n");改成printf(0);

        代码:

#include <stdio.h>

/* main: generate some simple output */

int main(void)
{
	printf(0);
	return 0;
}

         然后编译运行:编译既不报错也不报警告,一切正常,但是运行程序什么也不打印

$ gcc main.c
$ ./a.out

        若打开-Wall选项编译就会报警告了:

$ gcc -Wall main.c
main.c: In function ‘main’:
main.c:7: warning: null argument where non-null required (argument 1)

         警告信息是”非空参数为空(参数1)”,若printf中的0是你不小心写上去的(如错误使用了编辑器的查找替换功能),此警告就能帮你发现错误,强烈建议每一个编译命令时都加上-Wall选项

总结:

尽管编译器的错误提示不够友好,但仍然是学习过程中一个很有用的工具,但反复练习,有了一定的经验积累之后面对编译器的错误提示就会从容得多了

眼过千遍,不如手过一遍



这篇关于《Linux C编程一站式学习》——第一个程序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程