• gcc编译代码报错及编译方式


    一、error: 'for' loop initial declarations are only allowed in C99 mode

    前段时间写了一个小C程序,放在linux下用gcc编译出错,弹出以下错误:

    百度后才知道,是gcc的模式问题。

    我在for循环里习惯直接定义并初始化变量来使用:

    for(int i=0;i<length; i++)

    而在gcc编译时是错误的,应该在循环外定义变量:

    int i;

    for(i = 0; i<length; i++)

    这样才编译通过。

    这是因为gcc基于c89标准,换成C99标准就可以在for循环内定义i变量了。

    如果一定要在for循环语句里定义并初始化,可以将文件按照下面的方式编译就会通过了:

    gcc src.c -std=c99 -o src

    二、gcc编译C文件

    常用编译命令选项
    假设源程序文件名为test.c。

    1. 无选项编译链接
    用法:#gcc test.c
    作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。

    2. 选项 -o
    用法:#gcc test.c -o test
    作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。

    3. 选项 -E
    用法:#gcc -E test.c -o test.i
    作用:将test.c预处理输出test.i文件。

    4. 选项 -S
    用法:#gcc -S test.i 
    作用:将预处理输出文件test.i汇编成test.s文件。

    5. 选项 -c
    用法:#gcc -c test.s
    作用:将汇编输出文件test.s编译输出test.o文件。

    6. 无选项链接
    用法:#gcc test.o -o test
    作用:将编译输出文件test.o链接成最终可执行文件test。

    7. 选项-O
    用法:#gcc -O1 test.c -o test
    作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。

    多源文件的编译方法

    如果有多个源文件,基本上有两种编译方法:
    假设有两个源文件为a.c和b.c,b.h,在a.c文件里调用b.c的函数

    1. 多个文件一起编译
    用法:#gcc b.c a.c -o a
    作用:将testfun.c和test.c分别编译后链接成test可执行文件。

    2. 分别编译各个源文件,之后对编译后输出的目标文件链接。
    用法:
    #gcc -c b.c //将b.c编译成b.o
    #gcc -c a.c //将a.c编译成a.o
    #gcc -o b.o a.o -o a //将b.o和a.o链接成a

    以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。

    3. 如果要编译的文件都在同一个目录下,可以用通配符gcc *.c -o 来进行编译。

    如果是有成千上万的项目文件,可以把上述的编译过程写进以下一个文本文件中:
    Linux下称之为makefile

    感谢各位网友的分享,仅作总结学习。

  • 相关阅读:
    WinForm的Chart控件画条形图
    WinForm的Chart控件画折线图
    自定义控件
    左侧收缩菜单
    数组
    C#生成随机数的三种方法
    WinForm之GDI手动双缓冲技术
    WinForm之GDI画图步骤
    WinForm GDI编程:Graphics画布类
    翻译:《实用的Python编程》08_02_Logging
  • 原文地址:https://www.cnblogs.com/silence-hust/p/4465886.html
Copyright © 2020-2023  润新知