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
感谢各位网友的分享,仅作总结学习。
gcc编译代码报错及编译方式的更多相关文章
- clang编译代码报错:`_start': (.text+0x24): undefined reference to `main'
1. 说明 使用clang++10.1编译报错: /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crt1 ...
- IntelliJ IDEA 编译代码报错 找不到符号 符号: 找不到符号包 包
在使用IDEA的时候,经常出现过找不到包或者找不到符号的情况,可以尝试以下几种方式来解决 1.如果项目使用的是Maven可以使用Maven-Reimport 2.还可以 Invalidate and ...
- LINUX下基于NVIDIA HPC SDK 的 VASP6.3.x编译安装报错整理
关于gcc 用旧版本安装NVIDIA HPC SDK再编译会报错: "/opt/rh/devtoolset-8/root/usr/include/c++/8/bits/move.h" ...
- 源码编译apache报错的解决方法
源码编译apache报错的解决方法 问题介绍 在源码编译安装httpd时,./configure执行无错误,到make时就报错,在网络上搜索了很多文章,很多方法如换apr-util的低版本并不能很 ...
- 编译PHP 报错:node.c: In function dom_canonicalization
编译PHP 报错:node.c: In function dom_canonicalization /opt/php-5.2.17/ext/dom/node.c:1953: error: deref ...
- idea中编译项目报错 java: javacTask: 源版本 1.8 需要目标版本 1.8
问题如上面所叙: > idea中编译项目报错 java: javacTask: 源版本 1.8 需要目标版本 1.8 解决方案: > Setting->Compiler->Ja ...
- webpack编译sass报错找不到module /css-loader/index.js... || 安装node-sass报错
今天无论在家还是在公司,安装node-sass总是失败,或安装成功了,使用webpack编译sass报错,说找不到module,按照提示的错误我找了node_modules下的css-loader,发 ...
- 后台程序编译过程报错PCC-F-02104, Unable to connect to Oracle
偶然重新编译了一下后台程序,发现编译过程报错无法连接数据库.但通过sqlplus登录数据库是正常的.后台程序改动中也做了详细的分析,没有改动相关数据库的参数和配置. 最后通过浏览器查看了很多相关问题的 ...
- 代码报错记录-MAVEN-2
报错: 编译错误,程序包org.junit找不到 原因: 这个是父项目,报错是在子项目中,子项目使用了父项目的junit包,由于scope是test,导致子项目在编译时找不到junit, 修改: 将父 ...
随机推荐
- TAG的用法和用途[转]
用一个例子来说明:一个combobox控件...一个textBox控件...一个datagridview控件!datagridview控件是连接数据库的...combobox和textBox是联合查询 ...
- (转)MapReduce二次排序
一.概述 MapReduce框架对处理结果的输出会根据key值进行默认的排序,这个默认排序可以满足一部分需求,但是也是十分有限的.在我们实际的需求当中,往往有要对reduce输出结果进行二次排序的需求 ...
- UNIX环境高级编程-环境配置
环境配置步骤如下. 1. 下载源文件:http://www.apuebook.com/src.tar.gz. 2. 复制src.tar.gz文件到/home/me/mydir/unixl/目录(自 ...
- C/C++运算符优先级
运算符优先级从高至低 优先级 操作符 描述 例子 结合性 1 ()[]->.::++-- 调节优先级的括号操作符数组下标访问操作符通过指向对象的指针访问成员的操作符通过对象本身访问成员的操作符作 ...
- Oracle RAC中的一台机器重启以后无法接入集群
前天有个同事说有套AIX RAC的其中一台服务器重启了操作系统以后,集群资源CSSD的资源一直都在START的状态,检查日志输出有如下内容: [ CSSD][1286]clssnmv ...
- cocos2dx中的用户数据的管理
提供了专门的类:CCUserDefault用来管理,且提供了单例方法:sharedUserDefault() 1.会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.w ...
- [原创] zabbix学习之旅六:如何解决zabbix server在内网,而邮件发送服务器在外网的问题
通过前面的文章,你已经可以快速地搭建一个报警系统,并能正常的收到报警邮件了.不过在很多企业级环境下,邮件发送服务器往往放在外网,而zabbix server放置在内网,在这种情况下,zabbix的报警 ...
- Can't update table 'test_trigger' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
[Err] 1442 - Can't update table 'test_trigger' in stored function/trigger because it is already used ...
- 使用XFire+Spring构建Web Service(一)——helloWorld篇
转自:http://www.blogjava.net/amigoxie/archive/2007/09/26/148207.html原文出处:http://tech.it168.com/j/2007- ...
- C#textbox右击弹出菜单
给窗口体拖一个contextMenuTrip 控件,也就是右键菜单控件,这时你就不要给这个控件写内容了, 选中textBox 然后点属性窗口,把它的contextMenuTrip 属性选中你刚才托的那 ...