是否可以在C++编译时计算函数长度?

我有这段代码:

constexpr static VOID fStart()
{
    auto a = 3;
    a++;
}

__declspec(naked) 
constexpr static VOID fEnd() {};

static constexpr auto getFSize()
{
    return (SIZE_T)((PBYTE)fEnd - (PBYTE)fStart);
}

static constexpr auto fSize = getFSize();
static BYTE func[fSize];

是否可以在不使用任何标准库的情况下在编译期间将“func[fSize]”数组大小声明为“fStart()”的大小?为了稍后将 fStart() 的完整代码复制到此数组中,这是必要的。

回答

存在没有方法标准C ++得到一个函数的长度。

您需要使用特定于编译器的方法。

一种方法是让链接器创建一个段,并将您的函数放在该段中。然后使用段的长度。

您可以使用一些汇编语言结构来做到这一点;取决于汇编程序和汇编代码。

注意:在嵌入式系统中,移动功能代码是有原因的,例如移动到片上存储器或交换到外部存储器,或者对代码执行校验和。


以上是是否可以在C++编译时计算函数长度?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>