Gcc 编译器新手教程

zh.wikipedia.org/wiki/GCC 维基百科词条
gcc.gnu.org/ GCC 官网
GCC 是什么?!一些刚接触 Linux 的童鞋,不知道如何去编译一个 C 源文件 :sweat:
好吧,我告诉你,在终端用 gcc 命令。
一个简单的让 test.c 生成可执行文件的命令

//filename test.c
#include<stdio.h>
int main()
{
  printf("Hello World!
");
  return 0;
}


gcc test.c

没有指定可执行文件名 (通过 -o 选项指定),默认生成 a.out
在来执行下
./a.out

输出:

还想知道更多?来

man gcc


额,先讲到这,,我要上课去了。。 :sob:
--------------------------- 我接着讲 ---------------------------------------
一般我是用下面这个命令编译的。
$ gcc -g -Wall test.c -lm -o test

为什么?选项 “”-g”" 表示在生成的目标文件中带调试信息,调试信息可以在程序异常中止产生 core 后,
帮助分析错误产生的源头,包括产生错误的文件名和行号等非常多有用的信息。
选项 -Wall 开启编译器几乎所有常用的警告。
:: 注意如果有用到 math.h 库等非 gcc 默认调用的标准库,请使用 -lm 参数

如何编译多个文件?
现在将程序 test 分割成 3 个文件:“test1.c”,“test2.c” 和头文件"hello.h"
首先是头文件"hello.h"

//filename hello.h
void hello (const char * name);

然后是主程序“test1.c”

//filename tets1.c
#include "hello.h"

int main()
{
   hello("Hello,World");
   return 0;
}

最后是 test2.c

//filename test2.c
#include <stdio.h>
#include "hello.h"

void hello (const char * str)
{
  printf ("%s!
", str);
}

接着就是编译了啊。

gcc -g -Wall test1.c test2.c -o test


想编译 c++ 源文件?
就用 g++ 命令吧

g++ -g -Wall test.cpp -o test


OK,暂时就到这吧。。。

1赞

哇,你的 man page 怎么是这个样子

man-pages_zh_CN

这个好像有中文翻译的,忘记是谁翻译的了

我的一直这样。。。 :sunglasses:

这个项目死了。github 上的残余看不懂。所以当初 fork 了也没搞明白怎么更新它。

中文 man 比较过时了……

我的 man gcc 结果和他一样。

楼主写的真好。感觉楼上的那些人是在歪楼

给个小小的建议,c99主函数的标准写法是
int main(void)
{
语句 ;
return 0;
}

规范也很重要哦亲~~~

不是 (void) 么。不过我一般不这么写的, :joy: 主要因为现在在搞 ACM ,不喜欢浪费这几个字。

抱歉。。。笔误。。。不严谨了。但还是规范的好。考虑到可移植性和可读性的问题。void 更清楚。因为省缺了以后不一定是 void。括号里可以不是 void 的。另外像 man() void main() 什么都是不规范的哦。虽然可以通过编译。

这个我知道,我都是 int main() 这么写的。

我刚试验了一下,貌似那样写开 -Wall 也不会警告。借同学的 win 用 vc++ 也没问题。我想可移植性只是理论上存在问题。现在的编译器都还蛮人性的。但总归看着不爽,毕竟官方承认的写法就两种 int main(int argc, char* argv]) 和 int main(void)。个人习惯吧。可能有点鸡蛋里挑骨头了。呵呵。

现在 ide 挺好的、、、