假设我具有在特定文件中加载所有包含的函数。我需要用c ++编写在给定的源文件中加载所有包含的函数,因此我将避免对包含的无限循环和循环调用。
要解决这个问题,我必须使用此功能,我不能一次使用编译指示或类似的方法,尽管我不确定如何使用,但我认为可以通过递归来解决
答案 0 :(得分:0)
通常,编译器会告诉您文件是直接还是间接包含自身,例如出现类似#include nested too deeply
之类的错误消息。
要针对特定文件进行测试,比如说myprogram.cpp
,可以使用g ++编译器的“仅预处理器”选项-E
:
g++ -E myprogram.cpp
它将解析所有宏和#includes,并告诉您是否存在您描述的这种递归。
但是,如果这是一项家庭作业或只是为了您的实践,请注意,#include可能会被其他#ifdef ...
之类的预处理指令所包围,这些指令会影响实际的包含。
如果允许您忽略此类#ifdef
-事物,则可以...
编写一个以文件名作为参数并读取文件所有行的函数
维护文件名堆栈,并在调用函数(1)时将filename参数推入该堆栈。
如果一行包含#include
,请检查要包含的文件是否已经在(2)的堆栈中。如果是,则说明您检测到一个
(无尽)递归。否则,使用该文件名递归调用函数(1)。
(1)运行结束后,从堆栈中获取文件名。