先来看一个经典小程序hello world!
代码语言:javascript复制#include "stdio.h"
#include "stdlib.h"
int main(void)
{
printf("Hello world!n");
exit(0);
}
注意:
①printf函数在stdio.h文件里,需要包含头文件stdio.h
②exit函数在stdlib.h文件里,需要包含头文件stdlib.h文件
③‘n'除了换行的作用外,还有刷新缓冲区的功能
④关于main函数的写法,读者可能见过很多种,包括
void main(void)
void main()
int main()
int main(void)
int main(int agrc, char** argv)// char* agrv[]
编者在这里建议读者使用后面两种写法,严格上讲这两种才是标准的。
学习Linux最好的方式就是查man手册
我来man一下exit函数 在linux终端下输入: man 3 exit
代码语言:javascript复制NAME
exit - cause normal process termination
SYNOPSIS
#include <stdlib.h>
void exit(int status);
DESCRIPTION
The exit() function causes normal process termination and the value of status & 0377 is returned to the parent (see wait(2)).
All functions registered with atexit(3) and on_exit(3) are called, in the reverse order of their registration. (It is possible for one of these func‐
tions to use atexit(3) or on_exit(3) to register an additional function to be executed during exit processing; the new registration is added to the
front of the list of functions that remain to be called.) If one of these functions does not return (e.g., it calls _exit(2), or kills itself with a
signal), then none of the remaining functions is called, and further exit processing (in particular, flushing of stdio(3) streams) is abandoned. If a
function has been registered multiple times using atexit(3) or on_exit(3), then it is called as many times as it was registered.
All open stdio(3) streams are flushed and closed. Files created by tmpfile(3) are removed.
The C standard specifies two constants, EXIT_SUCCESS and EXIT_FAILURE, that may be passed to exit() to indicate successful or unsuccessful termination,
respectively.
RETURN VALUE
The exit() function does not return.
如果你英文不太好,没关系,这里先提供谷歌翻译给你~
代码语言:javascript复制名称
退出-导致正常进程终止
概要
#include <stdlib.h>
void exit(int status);
描述
exit()函数导致正常进程终止,并且状态&0377的值返回给父级(请参阅wait(2))。
在atexit(3)和on_exit(3)上注册的所有函数均以与注册相反的顺序调用。 (这些功能之一可能
使用atexit(3)或on_exit(3)来注册要在退出处理期间执行的其他功能的说明;新注册已添加到
如果这些函数之一未返回(例如,它调用_exit(2)或使用
信号),则不调用其余功能,而放弃进一步的退出处理(特别是stdio(3)流的刷新)。如果一个
已使用atexit(3)或on_exit(3)多次注册该函数,然后调用该函数的次数与已注册的次数相同。
所有打开的stdio(3)流都被刷新并关闭。由tmpfile(3)创建的文件将被删除。
C标准指定了两个常量EXIT_SUCCESS和EXIT_FAILURE,可以将其传递给exit()来指示成功或失败的终止,
分别。
返回值
exit()函数不会返回。
我们来编译一下hello.c
一个源文件经过一个什么样的过程才能被执行? 源文件-->预处理-->编译-->汇编-->链接-->可执行文件
预处理
以#开头的命令称为预处理命令,像#include, #if, #ifndef, #indef等命令,预处理是将宏定义展开,根据条件编译选择使用到的代码,输出到.i文件等待下一步处理. 使用arm-linux-cpp工具
编译
编译就是将.i文件翻译成汇编代码 使用ccl工具
汇编
汇编就是将上一步输出的文件翻译成符合一定格式的机器码,机器码就是机器识别的代码,例如01010101这样的.在linux系统一般为elf文件或者obj文件. 使用arm-linux-as工具.
链接
链接就是将上一步得到的文件跟库文件链接起来,最终生成可以在特定平台运行的可执行文件.
运行如下: