是否可以在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 ++得到一个函数的长度。
您需要使用特定于编译器的方法。
一种方法是让链接器创建一个段,并将您的函数放在该段中。然后使用段的长度。
您可以使用一些汇编语言结构来做到这一点;取决于汇编程序和汇编代码。
注意:在嵌入式系统中,移动功能代码是有原因的,例如移动到片上存储器或交换到外部存储器,或者对代码执行校验和。