C++:内联函数和链接时间代码生成

sho*_*osh 7 c++ inline header visual-studio

直到一段时间以前,我的代码库非常接近#include地狱.每当我更改一个即使是非常重要的.h文件时,几乎所有文件都被重新编译.
如此高的标头依赖性的主要原因是我有许多需要内联的小函数,我的印象是,对于内联工作,它们需要与调用代码在同一个翻译单元中,所以它们需要是在标题中.对于内联函数甚至编译其他标题也需要包含在标题中,ad infimum.

输入链接时代码生成(在Visual Studio中).其中一个主要优点是现在的内联函数可以跨越翻译单元.
但我仍然不确定.我怎么能真正确定这些功能真的被内联?我意识到无论我在哪里定义函数,编译器基本上可以做任何想做的事情.

有没有办法检查内联的内容?

vee*_*efu 7

我知道在C++中这是禁忌,但你可以将这些函数实现为预处理器宏.对不起,我现在用肥皂洗脸.


unw*_*ind 1

获得可执行文件后,您可以使用工具对其进行检查并在符号表中查找内联函数的名称。Dependency Walker是一种非常有用的工具。

当然,这是假设您可以获得一个结合了足够的优化设置的构建,以便编译器可以进行内联,同时保留符号。

对于 Visual Studio,我认为“发布”版本通常与这些版本相匹配,但我不完全确定。