比赛中可能用到的g++选项
嫌编译选项太长可以写在bash里
# build.sh
g++ $1.cc -Wall -Wextra -Wconversion -Wshadow -Wformat=2
# 调用
sh build.sh name
编译警告
-Wall -Wextra
包含了很多有用或没用的警告,比如non-void function没写返回值,或定义了没用的变量等。有时还会指出哪些地方优先级容易出问题(虽然大多数是压代码搞出来的)。
-Wconversion
警告一下某些隐式类型转换。有这个对曾经写出
const int pi=3.14159265358979…
这样的无脑代码的我会好一些。
-Wshadow
警告一下重名变量的掩盖的问题。
-Wformat=2
警告一下不规范的scanf/printf格式。
-Wstack-usage=1
输出一下每个函数使用栈的信息。
运行时检查
-D_GLIBCXX_DEBUG
(#define GLIBCXX_DEBUG)
加入对STL的运行时检查。
主要是迭代器合法性检查和算法执行的前置条件检查。
-fsanitize=undefined -g
UBsan的运行期未定义行为检查。整数溢出也能被查出来。
-fsanitize=address -g
Address Sanitizer的检查,主要查越界访问这种情况。
有了这些在RE的情况下会方便点。
用时/调用次数分析
不用在代码里面写一大堆clock()了
time ./a.out <in.txt >out.txt
先看一下总时间
-pg 然后 gprof
可以看到各个函数运行的占比
-ftest-coverage -fprofile-arcs 然后 gcov
可以看到每行代码的调用次数
毒瘤卡常专用