>假设我有加载某个文件中的所有包含的函数。我需要用 c++ 编写函数,将所有包含加载到某个给定的源文件中,这样我就可以避免对 include 的无限循环和循环调用。
为了解决这个问题,我必须使用这个函数,我不能使用一次编译指示或类似的东西,我认为可以通过递归来解决,尽管我不确定如何
通常编译器会告诉您文件是否直接或间接包含自身,例如通过#include nested too deeply
这样的错误消息。 要针对特定文件进行测试,假设myprogram.cpp
,您可以使用 g++ 编译器-E
的"仅预处理器"选项:
g++ -E myprogram.cpp
它将解析所有宏和 #includes,并告诉您是否存在您描述的此类递归。
但是,如果它是家庭作业或仅用于您的练习,请注意,#include 可能被其他预处理器指令(如#ifdef ...
)包围,这些指令会影响实际的包含。
如果你被允许忽略这些#ifdef
事情,你可以......
编写一个函数,该函数将文件名作为参数并读取文件的所有行
它维护一个文件名堆栈,并在调用函数 (1) 后将文件名参数推送到此堆栈。
如果一行包含
#include
,请检查要包含的文件是否已在 (2) 的堆栈中。如果是,则表示您检测到 (无休止的)递归。否则,使用该文件名递归调用函数 (1)。运行完 (1) 后从堆栈中获取文件名。