编写一个最简单的Linux程序

代码如下:

#include <stdio.h>
main()
{
        printf("Hello, A !\n");
}


 

命名为 lab-z.com

gcc -o lab-z lab-z.c

./lab-z 即可运行

1

另外,还可以定义一个宏,输出当前运行到的位置(在Debug Firmware时会很有用)

#include <stdio.h>
#define	dprint( args...) printf(args);printf("%s  %d\n",__FILE__,__LINE__);
main()
{
	printf("Hello,A\n");
	dprint("Hello,B\n");
}

 

就像 http://www.lab-z.com/vc-%E4%B8%AD%E8%BE%93%E5%87%BA%E5%BD%93%E5%89%8D%E8%BF%90%E8%A1%8C%E7%9A%84%E6%96%87%E4%BB%B6%E5%92%8C%E6%89%80%E5%A4%84%E7%9A%84%E8%A1%8C%E6%95%B0%E4%BB%A5%E5%8F%8A%E6%89%80%E5%9C%A8%E5%87%BD/ 这篇文章提到的一样

2

参考:
1.http://ggmmchou.blog.163.com/blog/static/59333149201021512218461/ linux c 002 一个gcc的最简单例子
2.http://www.uml.org.cn/c++/200902104.asp C中的预编译宏定义

《编写一个最简单的Linux程序》有3个想法

  1. 从 C89 开始 C 语言标准规定 main() 的函数原型(一般情况下)只有两种:

    int main(void);
    int main(int argc, char *argv[]);

    如果用 cc 开 -Wall,写 K&R 的 main() 会给出警告。

    此外这个 dprint 宏的实现比较危险,比如说假如我的代码里面

    for (int i=0; i<n; ++i)
    dprint("%d\n", a[i]);

    那个宏加上 block { … } 比较好,或者还是单独写一句给行号。另外 C99 里面有 __func__。

  2. gcc 默认不开优化。如果要分发二进制可执行文件,建议开启优化选项,比如 -O2,或者更激进的 -O3。如果只是在本机使用,可以通过指定 -march=native 本机架构。如果要分发,可以通过 -march 选项调整架构(默认选项可能是 i386 或者 x86-64,那个很多新的指令集是不支持的,但反过来如果开启了那编译的二进制文件在不支持这些指令集的机器上就跑不了),还有 -mtune 可以调针对某种 CPU 指令集的优化:https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注