gpt4 book ai didi

c++ - 编译单个大头文件(VS : C1063)

转载 作者:搜寻专家 更新时间:2023-10-31 01:02:33 27 4
gpt4 key购买 nike

我正在尝试将一本书编译成我的可执行文件。

这本书必须编译成我的可执行文件。我没有从中读取的文件或某些其他数据库管理系统。

目前,我将我的书的文本放在一个头文件中,该文件具有返回文本字符串的函数。

问题是这个头文件长 47,000 多行,大小超过 4MB。

我尝试像这样在我的 main.cpp 文件中测试这个文件:

#include "MyBook.h"

int main(int argc, char** argv)
{
auto myBookStr = MyBook_ToString();
loadMyBook(myBookStr);
}

使用 VS2012 64 位版本编译时出现以下错误:

fatal error C1063:编译器限制:编译器堆栈溢出

解决此问题的最佳方法是什么?在我脑海中,我唯一能想到的就是将 header 拆分为多个文件,并使用一个函数在每个文件中返回一个字符串。有没有更优雅的编译大型头文件的解决方案?

最佳答案

我真的很讨厌人们将数据放入头文件中。

如果必须将数据编译成可执行文件,请将所有数据移动到源文件中。

例如:
book.cpp:

const char Book1_text[] = 
"Four score and seventy years ago"
" our forefathers came to this island"
" to consume our every byte of data"
//...
" and thus ends my book."

book.hpp:

#ifndef BOOK_HPP
#define BOOK_HPP
extern const char Book1_text[];
#endif // BOOK_HPP

源文件允许您编译数据一次,然后仅当内容发生变化时。

当您将数据放入 header 时,每个包含 header 的文件都会获取数据并编译 header 。如果我对其中一个源文件进行更改,书籍数据将再次编译,因为它位于头文件中。

您真的需要在您的可执行文件中包含数据吗?

它可以在程序之外的文本文件中吗?

它可以在数据库中吗?

编辑 1:
您可以将本书分成几章,并将每一章作为单独的数据说明,甚至作为单独文件中的单独数据说明。

分解成章节允许您创建指向章节的指针数组。这将有助于更轻松地编制索引和推进。如果您需要前进到第 9 章,只需转到索引中的插槽 9 并拉出指针即可。 :-)

数据文件的生成

在许多商店中,他们不是手动输入所有数据语句,而是创建一个小型应用程序,该应用程序采用源代码(如文本文件)并将其转换为 C 数据语句。这允许更轻松地更新原始文本文件(一次),然后简单地生成数据语句。否则,文本编辑的传播将变得难以处理。

关于c++ - 编译单个大头文件(VS : C1063),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26981436/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com