头文件添加数据量过大有何解决办法?多选择类游戏大量题目场景如何优化
原有方案的缺陷
你当前的思路存在多个明显问题,完全不适合百级题量的场景:
- C/C++ 的头文件(.h)设计定位是声明接口,而非存放函数实现,除非是inline或模板函数,否则将函数实现写在.h中会大概率触发多源文件引入后的重复定义编译错误
- 维护成本极高:新增题目需要新增头文件、手动在主文件添加对应include语句、手动调用对应questionX函数,仅几百个题目就要写上千行冗余代码,调整通用逻辑需要逐个修改所有头文件,可维护性为0
- 编译效率极低:引入数百个头文件后全量编译速度会大幅下降,修改任意单题内容都需要触发全项目重新编译
推荐的替代方案
按你的编程熟练度可以选择两种方案:
入门级方案(无额外学习成本,适合新手)
将所有题目相关逻辑收拢到一对源文件中,用结构化的方式存储所有题目,不需要拆分多个文件:
- 首先定义通用的题目结构体,写在
questions.h中:
#pragma once // 可根据你的需求自由增减字段 typedef struct { const char* title; // 题干内容 const char* options[4]; // 四个选项内容 int correct_option_index; // 正确选项的索引(从0开始计数) } Question; // 对外提供获取所有题目的接口 int fetch_all_questions(Question** question_list);
- 在
questions.cpp中存放所有题目内容、实现接口:
#include "questions.h" // 所有题目统一存放在静态数组中,新增题目直接往数组里加元素即可 static Question g_question_pool[] = { { "1+1的运算结果是多少?", {"A. 1", "B. 2", "C. 3", "D. 4"}, 1 }, { "以下哪种语言属于编译型语言?", {"A. Python", "B. JavaScript", "C. C++", "D. PHP"}, 2 }, // 其余几百个题目都按上述格式追加即可 }; int fetch_all_questions(Question** question_list) { *question_list = g_question_pool; return sizeof(g_question_pool) / sizeof(Question); }
- 主逻辑文件只需要引入一次
questions.h,调用接口拿到所有题目后循环处理即可,不需要再写数百个include、也不需要手动调用数百个函数。新增题目只需要在g_question_pool数组里加一行配置即可,不需要修改其他代码。
进阶方案(适合题量持续增长、需要非技术人员参与配置的场景)
将题目内容完全从代码中剥离,使用JSON、CSV或自定义纯文本格式存放在单独的配置文件中,代码仅实现通用的配置读取、题目渲染、正误判断逻辑。
这种方案的优势是修改、新增题目完全不需要修改代码、不需要重新编译程序,甚至可以实现运行时动态加载新题目。
内容的提问来源于stack exchange,提问作者dRacoons
相关产品推荐
相关产品推荐

