算法竞赛使用的在线判题平台在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(之前就已经有在使用了)。

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

算法竞赛中G++编译器的编译指令简单说明的更多相关文章

  1. 算法竞赛中c++一些需要注意的错误

    1. 关于精度: 取整 除法取整: (除数为正)被除数为正时系统除法为向下取整,被除数为负时系统除法为向上取整. 向上取整(被除数非负,除数为正): 一般写法(有bug): int cal(int x ...

  2. Delphi 预编译指令

    <Delphi下深入Windows核心编程>(附录A Delphi编译指令说明)Delphi快速高小的编译器主要来自Object PASCAL的严谨,使用Delphi随时都在与编译器交流, ...

  3. Delphi编译指令说明

    Delphi快速高效的编译器主要来自Object PASCAL的严谨,使用Delphi随时都在与编译器交流,大部分情况下不需要干涉编译器的运行,但是有时也需要对编译器进行必要的设置. ******** ...

  4. Delphi中预编译指令

    本文转自 http://www.cnblogs.com/JackSun/archive/2010/12/20/1911250.html <Delphi下深入Windows核心编程>(附录A ...

  5. iOS中的预编译指令的初步探究

    目录 文件包含 #include #include_next #import 宏定义 #define #undef 条件编译 #if #else #endif #if define #ifdef #i ...

  6. gcc/g++编译器的安装与说明

    gcc/g++编译器的安装与说明 1.gcc/g++编译器的安装 gcc yum install gcc g++ yum install gcc-c++ 2.gcc/g++的作用 将c/c++源代码编 ...

  7. gcc/g++ 实战之编译的四个过程

    gcc和g++分别是GNU(一个开源组织)的c&c++编译器   对于.c后缀的文件,gcc把它当做是C程序,g++当做是C++程序:对于.cpp后缀的文件,gcc和g++都会当做c++程序. ...

  8. Ubuntu下C++编译指令总结

    本实例只是简单的调用了一个libcurl.a的静态库,实例代码如下: #include <curl/curl.h> #include <iostream> using name ...

  9. C/C++中的预编译指令

    工作中遇到的: 一个头文件中的: #pragma warning(disable:4996)#pragma warning(disable:4244)#pragma warning(disable:4 ...

随机推荐

  1. MVC 全局异常过滤器HandleErrorAttribute

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  2. jquery 综合使用例子

    效果如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...

  3. C#面试题总结——程序设计基础

    一.类型与变量 1.C#支持哪几个预定义的值类型? 主要包括五个类型:整数,浮点数,字符型,bool类型以及decimal型(小数型).其中每一个类型分别有多个内置类型组成. 2.C#支持哪几个预定义 ...

  4. GoEasy实现web实时推送过程中的自动补发功能

    熟悉GoEasy推送的朋友都知道GoEasy推送实现web实时推送并且能够非常准确稳定地将信息推送到客户端.在后台功能中查看接收信息详情时,可有谁注意到有时候在发送记录里有一个红色的R标志?R又代表的 ...

  5. Eclipse MyEclipse 复制项目 复制现有项目 复制功能相似项目

    如果现在已经存在一个Java Web项目 ProjectA,现在想做另外一个项目,里面绝大部分功能和结构都可以复用,如果想通过复制的方法来,那么可以这么做: 1.到资源管理器中,将ProjectA文件 ...

  6. B - Maya Calendar(第二季水)

    Description During his last sabbatical, professor M. A. Ya made a surprising discovery about the old ...

  7. #ifndef #define #endif 防止头文件被重复引用

    想必很多人都看过“头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用include来包含这个头文件 ...

  8. FreeImage裁剪示例

    //截图 int cropImage(const char* file, int left, int top, int right, int bottom, BYTE* &dstData, D ...

  9. 再次优化NGINX+php-fpm上传

    上次写了一篇nginx+php-fpm优化上传,一位博友留言介绍了,第三方nginx upload module http://www.grid.net.ru/nginx/upload.en.html ...

  10. opencv菜鸟学习之旅cvNorm

    Norm 计算数组的绝对范数, 绝对差分范数或者相对差分范数 double cvNorm( const CvArr* arr1, const CvArr* arr2=NULL, int norm_ty ...