zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    Android开发--去掉标题栏
    Android开发app如何设定应用图标下的应用名称为汉字以及自定义图标
    mysql的sql其他 SQL中inner join、outer join和cross join的区别
    中文乱码问题 -js页面传值乱码
    liunx Centos Xshell 简单命令汇总
    html 属性及相关应用-实例
    时间格式转换
    三元表达式
    Grid++Report生成简单的条形码、Excel导出、图表控件 等
    jmp指令的简单应用
  • 原文地址:https://www.cnblogs.com/silence-hust/p/4465886.html
Copyright © 2011-2022 走看看