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 2025-04-02 00:40  熙玺  阅读(367)  评论(0)    收藏  举报

Shu-How Zの小窝

Loading...