如何用 dev c++ 写代码

如何用 dev c++ 写代码

goto lil_tea 的博客.

在 noip 考场上只提供 dev c++, 用 dev c++ 写代码很容易把我们给累死, 那么本文从语言层面分析了怎么用 dev c++ 写代码才能稍微舒适一些.

重要声明, 重要声明, 重要声明.
我平时在 unix 或 linux 上写代码, 非常不喜欢也不习惯 windows.
所以我提供的设置都是让 linuxer 在只能用 c++ 2011 的情况下而且在 windows 里写代码的时候更舒适的写代码用的.
如果是工程中就不要用这里面的大多数方式.
如果你本身就习惯 windows 那么祝你平安.

自力更生, 艰苦奋斗.

语言标准

noip 的标准是 c++ 2014. 但 dev c++ 的 g++ 4.8.4 只提供 c++ 1998, c++ 2003, c++ 2011. 所以我们使用 c++ 2011.

在编译选项里加上 -std=c++11 -O2 就好了.

代码补全

我非常不喜欢代码补全, 任何 ide 的代码补全都不喜欢, 所以打开 dev c++ 第一件事就是关掉代码补全.

long 的大小问题

因为 windows 上的 long\(32\) 位, 不符合 lp64, 很容易把我们给气死.

所以我们在所有 #include 之后使用 (注意: 请千万千万要在所有 #include 之后再使用):

#define	long	std::int64_t

这里我用了宏, 不符合 lil_tea c++ 2026 style guide, 但这是身不由己的无奈之举, 没办法的事.

注意在文件末尾尽量加一行 (不加也不会有事):

#undef	long

注意: 这样就不能再用 std::scanfstd::printf 了, 我非常不建议使用快读, 建议使用关同步 std::cin std::cout.

再有就是说, long double 会变成 std::int64_t double, 所以 long double 没法用了, 不过 noip 环境 double 足够.

字面量问题

因为重定义了 long, 所以也就不能再使用 0ll 后缀当 long 了, 也不能再用 0ulul 后缀当 unsigned long 了.

而我又非常不喜欢写 0ll0ull 所以我得自己创建个后缀.

我把目光投向了 c++ 2023 的 0z0uz, 0zlong, 0uzunsigned long, 而且都是 \(64\) 位.

既然 c++ 2023 能设计 0z0uz, 那我也能设计 0_z0_uz.

这个就很简单了:

constexpr std::int64_t operator ""_z(unsigned long long x) {
	return x;
}

constexpr std::size_t operator ""_uz(unsigned long long x) {
	return x;
}

注意: 参数列表里出现了 long 标识符, 所以需要放在 #define long std::int64_t 的前面.

我喜欢用 long 当整数类型, std::size_t 当数组的偏移量类型, 如果你喜欢别的类型的话也可以.

如果你发现 ""_z 会在 g++ 4.8.4 里编译错误, 请使用 ""z, 但这确实是不符合 c++ 2011 的, c++ 2011 规定的是下划线开头的后缀才能是用户定义的后缀.

换行符问题

dev c++ 默认就是 lf 换行, 还好.

如果你要输出换行, 信任 std::endl 就好了, 如果嫌慢可以用 "\n".

常量问题

如果你发现 g++ 4.8.4 不支持 constexpr, 请大骂 fuck 并改成 const.

最终代码框架 (可以用 g++-16 -std=c++11 编译, 大概率也能用 dev c++ 提供的 g++-4 -std=c++11 编译)

#include <bits/stdc++.h>	// 所有 dev c++ 都可以用万能头, 万能头符合 [lil\_tea c++ 2026 style guide](https://www.cnblogs.com/young-tea/p/19815137), noip 和工程中都推荐使用

// using namespace std;	// 禁止写这行

constexpr std::int64_t operator ""_z(unsigned long long x) {
	return x;
}

constexpr std::size_t operator ""_uz(unsigned long long x) {
	return x;
}

#define	long	std::int64_t

long	nxt(void) {
	long x;
	std::cin >> x;
	return x;
}

/*
prob link:	
start think:	
term think:	
start code:	
term code:	
*/

constexpr long k_inf = 0x3f3f3f3f3f3f3f3f_z;
constexpr long k_mod = 0x3b800001_z;
constexpr std::size_t arr_len = 1_uz << 18;

void	solve(void) {
}

signed	main(void) {
//	std::freopen(".in", "r", stdin);
//	std::freopen(".out", "w", stdout);
	std::ios::sync_with_stdio(0);
	std::cin.tie(nullptr);
	std::cout.tie(nullptr);

	long _ = 1;

//	_ = nxt();

	while (_--)
		solve();

	std::cout.flush();
	return EXIT_SUCCESS;
}

#undef	long
posted @ 2026-04-17 23:29  lil_tea  阅读(39)  评论(0)    收藏  举报