C++ 典当';s";股票;C/C+中的函数同系物+;

C++ 典当';s";股票;C/C+中的函数同系物+;,c++,stock,pawn,C++,Stock,Pawn,我想知道是否有一些C/C++编译器实现了类似于Pawn的stock关键字的东西 在Pawn中,您可以声明如下函数: stock xfunc(a, b) { [...] // Bla bla } stock关键字告诉编译器,如果在代码中的某个地方没有调用该函数,就不要将其包含在已编译的二进制文件中。这使得函数可以说是兼性的,如果不使用它,它不会增加二进制大小 我会发现在C/C++中有这样的东西很有用,因为我想包含一些在程序/代码的第一次迭代中不会立即使用的函数。当然,有些人可能会告诉我

我想知道是否有一些C/C++编译器实现了类似于Pawn的stock关键字的东西

在Pawn中,您可以声明如下函数:

stock xfunc(a, b)
{
     [...] // Bla bla
}
stock关键字告诉编译器,如果在代码中的某个地方没有调用该函数,就不要将其包含在已编译的二进制文件中。这使得函数可以说是兼性的,如果不使用它,它不会增加二进制大小

我会发现在C/C++中有这样的东西很有用,因为我想包含一些在程序/代码的第一次迭代中不会立即使用的函数。当然,有些人可能会告诉我还有其他方法可以做到这一点,比如使用预处理器宏等等。我不是在要求其他方法,我想要的是允许我以后使用这些函数而不必取消注释、更改宏以使其编译等(即无缝)。但是没有编译它们,因此当我不使用它们时会增加可执行文件的大小

我认为这是一个方便的功能。 谢谢

另外,如果答案是“它不包括在语言标准中”,是否有编译器使用特定的布拉格、非官方关键字等进行编译


编辑:我应该提到,我最感兴趣的是虚拟功能的这个特性。我知道标准函数存在函数级链接,但是虚拟函数呢?我想,如果我没有弄错的话,通常情况下,即使不使用虚拟函数来维护类布局与类原型的兼容性,也会编译虚拟函数?你能确认一下吗?谢谢

任何现代优化编译器/链接器都会进行“死代码消除”,不仅去除未调用的函数,还去除未使用的调用函数位。

这通常在链接阶段自动解决,C或C++不需要这样的关键字。一旦我编写了一个函数,我希望它能够编译来捕捉编译器错误,因此我决不会使用宏或注释来排除编译中的错误,因为它无论如何都不会使它进入可执行文件(如果其他人指出的话),几乎所有编译器都无缝地执行它。这不需要成为语言标准的一部分。我不明白为什么在链接器能够更好地做出决策时,开发人员有责任对这样的函数进行注释。如果您知道某些内容将不被使用,请不要编写它。另请参见:,,编辑了我的问题,关于虚拟函数。这是否也适用于虚拟函数?这是我提出这个问题的主要动机(但有点忘了提,现在我提了)。只要编译器能看到它是未使用的。如果您有疑问,请编译一个示例并查看生成的asm。