You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C++练习Project Euler时如何优化文件组织减少冗余文件?

解决方案

有两种常用的轻量化方案可以实现每道题仅对应一个CPP文件的需求:

方案1:主文件+单CPP文件模式,无需额外头文件

不需要为每个题目单独写头文件,直接在主文件中用extern关键字声明要调用的函数即可,每道题仅保留一个独立的CPP文件。

  • 主文件代码示例(以运行第2题为例):
// 直接声明外部函数,不需要引入头文件
extern void solve2();
int main() {
    solve2();
    return 0;
}
  • 对应的Problem2.cpp代码,无需额外头文件:
#include <iostream>
void solve2() {
    // 你的解题代码
    int answer = 42;
    std::cout << answer;
}

操作逻辑:切换题目时,只需要把主文件里的extern声明和调用的函数名改成对应题目编号,同时把对应题目的CPP文件添加到当前项目中即可,不需要额外维护头文件。

方案2:单题独立可运行,无需修改主文件

更适合刷题场景,不用每次调整主函数代码:
每道题的CPP文件都单独写完整的main函数,比如Problem3.cpp内容:

#include <iostream>
int main() {
    // 解题代码
    int answer = 123;
    std::cout << answer;
    return 0;
}

操作逻辑:所有题目CPP都放在同一个项目里,做哪道题的时候,右键点击其他题目的CPP文件,选择「属性」-「常规」-「从生成中排除」,选择「是」即可,每次编译只会运行当前没有被排除的题目的main函数,完全不需要修改任何代码,切换题目只需要调整文件的生成排除状态即可。

进阶可选:用宏实现一键切换题目

如果你不想每次改主文件的函数名,可以用预处理器拼接功能简化操作:
主文件代码:

#define SOLVE_FUNC(id) solve##id
#define DECLARE_SOLVE(id) extern void SOLVE_FUNC(id)()
// 在这里修改要运行的题目编号即可
#define CURRENT_PROBLEM 2
DECLARE_SOLVE(CURRENT_PROBLEM);
int main() {
    SOLVE_FUNC(CURRENT_PROBLEM)();
    return 0;
}

切换题目时只需要修改CURRENT_PROBLEM后的数字即可,不需要改其他代码。

内容的提问来源于stack exchange,提问作者IX Nap Time

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:06:03