【发布时间】:2021-01-29 18:52:49
【问题描述】:
我有这段代码:
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() 的完整代码复制到这个数组中。
【问题讨论】:
-
很抱歉,我的朋友,功能不能这样工作。
-
你需要这个做什么?也许这是一个 XY 问题,我们可以针对它提出不同的解决方案。
-
这是XY problem 的经典例子。请解释为什么?你为什么需要这个舞台的东西?解释您的代码应该提供的功能,而不是您认为提供该功能所需的功能。克服这个问题的经典方法是这样开始解释:“作为最终用户,我想要......”。
-
@David "...我打算多次修改fStart(),..." 那里具体需要修改什么,不能修改什么通过参数化(无论是 constexpr / 模板,还是在运行时)?你怎么知道应该在那里更改的操作码?
-
只是提醒一下,从一个函数生成的代码甚至可能不会放在单个连续的内存块中。有关解释,请阅读easyperf.net/blog/2019/03/27/…
标签: c++ windows constants visual-studio-2019