算法竞赛中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 ...
 
随机推荐
- 关于内层DIV设置margin-top不起作用的解决方案
			
from:http://www.cnblogs.com/huangyong8585/archive/2013/05/21/3090779.html (一) 近日在做另外一个站点的时候,又遇到这个问题, ...
 - 【SQL语句】 -  在所有存储过程中查找关键字,关键字不区分大小写 [sp_findproc]
			
USE [EShop]GO/****** Object: StoredProcedure [dbo].[sp_findproc] Script Date: 2015/8/19 11:05:24 *** ...
 - java 短信发送例子 tdy
			
import java.io.IOException; import java.util.logging.Level;import java.util.logging.Logger;import or ...
 - Dijkstra算法(迪杰斯塔拉算法)
			
算法描述: Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法能得出最 ...
 - mysql查询优化技巧
			
索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存)等等.这里记录的优化技巧更适合开发人员,都是从网络上搜集和整理的,主要是查询语句上的优化,其他层面上 ...
 - PHP搭建(windows64+apache2.4.7+mysql-5.6+php5.5)
			
现在大部分一键安装包多是32位的,并不支持64位,直接在64位的系统上使用会报错的,所以我这里就来说说windows 64位系统如何建立Apache+PHP+MySQL环境的! 我这里演示用的wind ...
 - C语言-数据的快速引用
			
1.常量:程序运行中,不会改变 整形常量 实形常量 字符常量:使用单引号引起的单个字符或者转移字符 ‘a’ 字符串常量:使用双引号引起的单个或者多个字符序列 "ab",存储的时候, ...
 - 循环-10. 求序列前N项和*
			
/* * Main.c * C10-循环-10. 求序列前N项和 * Created on: 2014年7月30日 * Author: Boomkeeper *******部分通过******* */ ...
 - The package does not support the device architecture (x86). You can change the supported architectures in the Android Build section of the Project Opt
			
The package does not support the device architecture (x86). You can change the supported architectur ...
 - 利用Azure Backup备份和恢复虚拟机(2)
			
虚拟机注册之后,下一步就是将他们添加为受保护的项,在菜单底部,单击"保护"按照提示选择需要保护的虚拟机 单击"下一步",在这个页面中需要选择配置虚拟机配 ...