Pawn 的 "stock" 函数同系物 C/C++
Pawn's "stock" function homolog in C/C++
我想知道一些 C/C++ 编译器是否实现了类似于 Pawn 的 stock 关键字的东西。
在 Pawn 中,你可以这样声明一个函数:
stock xfunc(a, b)
{
[...] // Bla bla
}
stock 关键字告诉编译器如果未在代码中某处调用该函数,则简单地不将其包含在已编译的二进制文件中。这使得函数可以说是兼性的,如果不使用它不会增加二进制大小。
我发现在 C/C++ 中加入这样的东西很有用,因为我想包含一些我不会在 program/code 的第一次迭代中立即使用的函数。当然,有些人可能会告诉我还有其他方法可以做到这一点,比如使用预处理器宏等。我不是在寻求另一种方法,我想要的是允许我稍后使用这些函数而不必取消注释的东西,更改宏以使它们得到编译等(即无缝)。但是......没有编译它们,因此在我不使用它们时增加了我的可执行文件大小!
我想说的是一个方便的功能。
谢谢!
P.S。如果答案是 "it's not included in the language standards",是否有任何编译器使用特定的编译指示、非官方关键字等来完成?
编辑:我应该提一下,我最感兴趣的是虚函数的这个特性。我知道标准函数存在函数级链接,但是虚拟函数呢?我认为通常情况下,如果我没记错的话,即使不用于维护 class 布局与 class 原型的兼容性,虚拟函数也会被编译?你能证实吗?谢谢
任何现代优化 compiler/linker 都可以 "dead code elimination" 并且不仅去除未调用的函数,还去除未使用的调用函数。
我想知道一些 C/C++ 编译器是否实现了类似于 Pawn 的 stock 关键字的东西。
在 Pawn 中,你可以这样声明一个函数:
stock xfunc(a, b)
{
[...] // Bla bla
}
stock 关键字告诉编译器如果未在代码中某处调用该函数,则简单地不将其包含在已编译的二进制文件中。这使得函数可以说是兼性的,如果不使用它不会增加二进制大小。
我发现在 C/C++ 中加入这样的东西很有用,因为我想包含一些我不会在 program/code 的第一次迭代中立即使用的函数。当然,有些人可能会告诉我还有其他方法可以做到这一点,比如使用预处理器宏等。我不是在寻求另一种方法,我想要的是允许我稍后使用这些函数而不必取消注释的东西,更改宏以使它们得到编译等(即无缝)。但是......没有编译它们,因此在我不使用它们时增加了我的可执行文件大小!
我想说的是一个方便的功能。 谢谢!
P.S。如果答案是 "it's not included in the language standards",是否有任何编译器使用特定的编译指示、非官方关键字等来完成?
编辑:我应该提一下,我最感兴趣的是虚函数的这个特性。我知道标准函数存在函数级链接,但是虚拟函数呢?我认为通常情况下,如果我没记错的话,即使不用于维护 class 布局与 class 原型的兼容性,虚拟函数也会被编译?你能证实吗?谢谢
任何现代优化 compiler/linker 都可以 "dead code elimination" 并且不仅去除未调用的函数,还去除未使用的调用函数。