算法竞赛使用的在线判题平台在FAQ会给出提交的代码是通过什么指令进行编译的。比如hustoj给出的c++编译指令通常是:

C++: g++ Main.cc -o Main -fno-asm -O2 -Wall -lm --static -DONLINE_JUDGE

这些看上去没有用的指令事实上的确有用。那么这些指令是什么意思呢?

  • -o Main:这个是指出输出文件名的参数,此处文件名为Main。针对算法竞赛这个似乎没必要知道。。
  • -fno-asm:这个的意思和字面(不让用汇编)差不都,也就是作用为不把asm,inline,typeof作为关键字。那么,不能用汇编,不能用内联,不能用typeof。这是一些限制,不是好事吧。。。
  • -O2:优化指令。后面可以跟数字表示优化级别。-O0表示不优化,-O1,-O2,-O3优化程度依次递增。OI竞赛是不开优化的,acm是O2。优化的例子,比如编译器开优化,int类型*2 /2会优化成>> / <<(位运算)。有说法是开优化有时候会把代码里面的疏漏显现出来(尤其是-O3)。那么在竞赛时这样做兴许会帮助找错吧。但是优化级开得太高对于调试不利。因为为了优化,编译器可能会打乱部分代码的顺序,造成我们单步调试时候会发现在C源代码里乱跳。
  • -Wall:这个的意思不是墙XD。W是警告,all是显示大多数警告。all的意思是所有但是实际是大多,这是因为一些警告是需要手动开启的。比如。。-Wfloat-equal这个指令会在浮点数直接使用==判断是否相等时给出警告,等等。
  • -lm:link math。使用数学库。这个没啥说的。。。
  • --static:静态链接编译指令。这个可以使得程序不再依赖外部的函数库运行。(于是我用的Qt编译的程序就不依赖各种Qtxxxx.dll了= =)。这个对于算法竞赛好像可以无视。。
  • -DONLINE_JUDGE:define ONLINE_JUDGE。也就是说写代码的时候可以写一些方便自己调试的代码,然后让其在提交后不被执行。比较常见的用法有在【#ifndef ONLINE_JUDGE】和【#endif】中间塞【freopen("output.txt", "w", stdout);】重定向输出流。等等。
  • -g:调试指令。在程序中塞入调试信息。这个在上面的那些参数中没有(废话...),这里提到的原因就是在使用Code::Block时,如果调试不能用,需要去加这个参数。

写这个的原因是之前这些编译指令是什么意思大多我都不太清楚,于是照着文档和实际应用写了个清单性质的总结。那么,以后应该也用得到了吧。比如,开O3看看能不能找出代码隐含的毛病(尚未试过),利用ONLINE_JUDGE(之前就已经有在使用了)。

这些内容,以后应该会在编译原理中学到吧。

最新文章

  1. 安装minicom
  2. YY一下微信线下支付的场景
  3. .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  4. 支付宝Cookie高危漏洞引发的思考
  5. Arch Linux 安装记录
  6. linux网站推荐
  7. Hbase二级索引
  8. jquery完成带单选按钮的表格行高亮显示
  9. new作为修饰符
  10. BZOJ 1261: [SCOI2006]zh_tree( 区间dp )
  11. 浅谈spring——spring MVC(十一)
  12. docker 系列 - 修改容器的 DNS 服务器
  13. eclipse php pdt插件安装
  14. A - Exposition CodeForces - 6E
  15. 【iCore4 双核心板_ARM】例程二十八:FSMC实验——读写FPGA
  16. 【Fiddler学习】Fiddler教程,比较经典全面(转)
  17. linux驱动编写之阻塞与非阻塞
  18. ORA-28000账户被锁和解锁
  19. R之内存管理
  20. 学习ThinkPHP第一天

热门文章

  1. jdbc读取数据库图片文件
  2. centos添加sudoers
  3. 【JSONKit】序列化Dictionary崩溃
  4. stuts1:(Struts)Action类及其相关类
  5. C语言-getopt函数
  6. mysql 命令
  7. 判断浏览器IE6
  8. 安装weblogic的步骤10.3.0.0
  9. Java、Tomcat 及 MySQL 环境配置
  10. Java IO流分析整理 .