算法竞赛中G++编译器的编译指令简单说明
算法竞赛使用的在线判题平台在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++编译器的编译指令简单说明的更多相关文章
- 算法竞赛中c++一些需要注意的错误
1. 关于精度: 取整 除法取整: (除数为正)被除数为正时系统除法为向下取整,被除数为负时系统除法为向上取整. 向上取整(被除数非负,除数为正): 一般写法(有bug): int cal(int x ...
- Delphi 预编译指令
<Delphi下深入Windows核心编程>(附录A Delphi编译指令说明)Delphi快速高小的编译器主要来自Object PASCAL的严谨,使用Delphi随时都在与编译器交流, ...
- Delphi编译指令说明
Delphi快速高效的编译器主要来自Object PASCAL的严谨,使用Delphi随时都在与编译器交流,大部分情况下不需要干涉编译器的运行,但是有时也需要对编译器进行必要的设置. ******** ...
- Delphi中预编译指令
本文转自 http://www.cnblogs.com/JackSun/archive/2010/12/20/1911250.html <Delphi下深入Windows核心编程>(附录A ...
- iOS中的预编译指令的初步探究
目录 文件包含 #include #include_next #import 宏定义 #define #undef 条件编译 #if #else #endif #if define #ifdef #i ...
- gcc/g++编译器的安装与说明
gcc/g++编译器的安装与说明 1.gcc/g++编译器的安装 gcc yum install gcc g++ yum install gcc-c++ 2.gcc/g++的作用 将c/c++源代码编 ...
- gcc/g++ 实战之编译的四个过程
gcc和g++分别是GNU(一个开源组织)的c&c++编译器 对于.c后缀的文件,gcc把它当做是C程序,g++当做是C++程序:对于.cpp后缀的文件,gcc和g++都会当做c++程序. ...
- Ubuntu下C++编译指令总结
本实例只是简单的调用了一个libcurl.a的静态库,实例代码如下: #include <curl/curl.h> #include <iostream> using name ...
- C/C++中的预编译指令
工作中遇到的: 一个头文件中的: #pragma warning(disable:4996)#pragma warning(disable:4244)#pragma warning(disable:4 ...
随机推荐
- 工具使用 eclipse the user operation is waiting for Building Working to be completed。
问题定位: 在使用 IDE开发时,学习一个新事物如语言,框架,出现错误时暂时无法判断是新写的代码错还是IDE使用错: 则编写简单的未使用该技术的test.java ,运行后还有异常出现,则不是代码问题 ...
- <转>科普CPU Cache line
转载于http://coolshell.cn/articles/10249.html CPU cache一直是理解计算机体系架构的重要知识点,也是并发编程设计中的技术难点,而且相关参考资料如同过江之鲫 ...
- HDU 5794 - A Simple Chess
HDU 5794 - A Simple Chess题意: 马(象棋)初始位置在(1,1), 现在要走到(n,m), 问有几种走法 棋盘上有r个障碍物, 该位置不能走, 并规定只能走右下方 数据范围: ...
- V - stl 的 优先队列 Ⅱ
Description Because of the wrong status of the bicycle, Sempr begin to walk east to west every morni ...
- PHP搭建(windows64+apache2.4.7+mysql-5.6+php5.5)
现在大部分一键安装包多是32位的,并不支持64位,直接在64位的系统上使用会报错的,所以我这里就来说说windows 64位系统如何建立Apache+PHP+MySQL环境的! 我这里演示用的wind ...
- python 文件移动(shutil)
# encoding=utf-8 # /home/bergus/tongbu/360共享/编程语言 # /home/bergus/桌面 # /home/bergus/test/hh import os ...
- Sum Problem-hdu-1001
Hey, welcome to HDOJ(Hangzhou Dianzi University Online Judge). In this problem, your task is to calc ...
- lostash 正则
(?:\s+?) 0个或者多个空格
- C Deepin指针
L-value -->标识了一个可以存储结果值的内存存储地址--指针变量 or 普通内存变量; R-value -->数值;
- 创立Est•Design华服高级成衣定制工作室 - 北京服装学院-莱佛士国际学院
创立Est•Design华服高级成衣定制工作室 - 北京服装学院-莱佛士国际学院 创立Est•Design华服高级成衣定制工作室 创立Est•Design华服高级成衣定制工作室 童雪涛 " ...