C++的命令行编译
为了防止在打比赛时提供的vscode无法使用c++插件的缘故,所以特别学了一下如何命令行编译(😇)
编译程序
首先我们需要编译程序
g++的编译选项一般有下面几种
指定 C++ 标准版本
- C++11:
-std=c++11 - C++14:
-std=c++14 - C++17:
-std=c++17 - C++20:
-std=c++20 - C++23:
-std=c++23(需编译器支持)
优化选项
-O0: 无优化(默认,适合调试)-O1: 基础优化-O2: 推荐的中等优化(平衡性能与编译速度)-O3: 激进优化(可能增加代码体积)-Os: 优化代码体积
其他常用选项
-Wall: 启用所有警告-Wextra: 启用额外警告-g: 生成调试信息(用于 GDB)-I路径: 添加头文件搜索路径-l库名: 链接动态库(如-lpthread)
我们常用的一般就是
g++ -std=c++17 -O2 -Wall -Wextra -Werror 程序.cpp -o 自定义执行程序名字
样例输入
我们如果不想手动输入样例,而是直接由程序输入
在windows下面我们可以使用这个命令
我们把数据放到input.txt里面
cmd /c "a.exe < input.txt > out.txt"
在命令 cmd /c 中,/c 是传递给 cmd(Windows 命令提示符)的一个参数,其含义是:执行完后续指定的命令后,立即关闭命令提示符窗口。
对拍
windows上面对拍程序
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
int main()
{
for(int T = 1; T <= 1000; T++)
{
system("data.exe > data.txt");
//Window下单位为ms,Unix下单位为s
double st = clock();
system("A.exe < data.txt > A.txt");
double ed = clock();
system("baoli.exe < data.txt > baoli.txt");
if(system("fc A.txt baoli.txt"))
{
//程序立即退出,此时a.in中的数据即为错误数据
puts("Wrong Answer");
return 0;
}
else printf("Accepted, 测试点 #%d, 用时 %.01fms\n", T, ed - st);
}
return 0;
}
linux上面的对拍程序
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
int main()
{
for(int T = 1; T <= 1000; T++)
{
system("data.exe > data.txt");
//Window下单位为ms,Unix下单位为s
double st = clock();
system("A.exe < data.txt > A.txt");
double ed = clock();
system("baoli.exe < data.txt > baoli.txt");
if(system("diff A.txt baoli.txt"))
{
//程序立即退出,此时a.in中的数据即为错误数据
puts("Wrong Answer");
return 0;
}
else printf("Accepted, 测试点 #%d, 用时 %.01fms\n", T, ed - st);
}
return 0;
}
posted on
浙公网安备 33010602011771号