在C或C ++程序中是否有任何方法可以获取有关可以调用的所有函数的信息?也许某种编译器宏?我知道有些程序可以接收源文件或.o文件并获取符号或原型,我想我可以在ac程序中运行这些程序,但我很好奇可能会返回函数指针函数或当前作用域中可用的函数原型数组,或相关的东西?
我不是很好地表达这一点,但问题是我对程序内部程序学习的好奇心(而不一定只是阅读自己的代码)。我有点怀疑有什么像我要求的那样,但我很好奇。
编辑:似乎我想知道的但是不知道如何很好地描述是在C或C ++中是否可以进行反射。谢谢你的回答。
答案 0 :(得分:5)
该语言尚不支持reflection。但是,由于您正在寻找一些信息来源,请查看Boost.Reflect
库,以帮助您在某种程度上为代码添加反射。另外,请查看ClangTooling
和libclang
,了解允许您进行自动代码分析的库。
答案 1 :(得分:4)
C和C ++无法收集所有可用功能的名称。
但是,您可以使用宏来测试标准(ANSI,ISO,POSIX等)合规性,然后可以用来保证每个标准功能的存在。
例如,如果定义了_POSIX_C_SOURCE
,您可以(通常)假设POSIX指定的函数可用:
#ifdef _POSIX_C_SOURCE
/* you can safely call POSIX functions */
#else
/* the system probably isn't POSIX compliant */
#endif
编辑:如果您使用的是Linux系统,则可以在feature_test_macros(7)
下找到一些常见的兼容性宏。 OS X和BSD应该具有大致相同的宏,即使它们可能没有该手册页。 Windows使用WINVER
和_WIN32_WINNT
宏来控制各版本的功能可见性。
答案 2 :(得分:1)
没有
C ++元编程能力薄弱,不包括任何形式的反思。但是,您可以使用gcc-xml之类的工具来解析C ++程序,并以更易于分析的格式导出其内容。
为C ++编写自己的解析器来提取函数声明将是一场噩梦,除非你只需要在你的特定项目中做到这一点,并且你已准备好削减一些角落。