在C / C ++中,我们有
#ifdef _DEBUG
...
#endif
在C#中我们有
#if DEBUG
...
#endif
和
[Conditional("DEBUG")]
我不希望任何像基于属性的处理仅调试代码那样花哨的东西,但想知道是否存在明显不变的事物或任何其他方式使代码仅出现在调试版本。例如,我现在在Lua做以下事情:
if not type(parameters.callback) == 'function' then
error('The "callback" parameter is not a function, or missing (nil).');
end
if not type(parameters.times) == 'number' then
error('The "times" parameter is not a number or missing (nil).');
end
if not type(parameters.interval) == 'number' or not parameters.interval == nil then
error('The "interval" parameter is not a number.');
end
我甚至不知道是否会这样。完全没用语言。
考虑到我写作的功能的性质,一个简单的retry
函数将尝试的次数,可选的间隔和回调作为参数 - 我预计在整个过程中会多次使用正在编写的应用程序 - 并且它要在微控制器上运行我觉得这些检查不应该在生产版本中进行,因为我猜测它们可能相对昂贵?!?!我甚至在for循环中进行了类型检查。
语言中是否已内置了允许条件编译的内容?或者有没有人想出一个干净利落的处理这类事情的方法?我知道我可以声明一个全局变量,将其标记为调试版本,并简单地放置,如果阻止上述内容,但我想我会问。
谷歌搜索让我无处可去。事实上,当我阅读谈论Lua的网站时,我觉得我已经回到了90年代中后期的网站。谢谢, 李。
修改
或许我只是把方法写成C模块?!?!
答案 0 :(得分:1)
使代码仅存在于调试版本中的方式
Lua没有“构建”。这是一种解释性语言。在内部,它被编译为字节代码,但这是一个实现细节。
但是,如果您可以使用构建步骤,那么您可以使用预编译器,就像C一样。实际上,你可以使用你的C编译器所使用的那个,然后你就会得到你已经熟悉的语法。
例如,我的旧版MSVC使用cl /EP <filename>
通过预处理器运行filename
并将输出转储到stdout。然后你可以写:
#ifdef _DEBUG
-- debug Lua code goes here
#endif
答案 1 :(得分:0)
最干净的方式可能就像
_DEBUG = true
if _DEBUG then
--code
end
答案 2 :(得分:0)
使用的Lua的味道是eLua或Embedded Lua,它允许预编译脚本到字节码。
代码在GitHub上,所以如果时间允许,我会看到提交一个允许真正条件编译的补丁,因为它是所有C的底层。
这样每个人都会受益。无论原始问题中的检查是否成本高昂,通常都会根据您是否正在积极处理或在生产环境中使用代码而不是相反的方式来进入或退出代码。 / p>
由于它们支持预编译,并且只针对具有不同性能和内存限制的嵌入式设备,如果它们尚未实现支持,我不会感到惊讶。我会沿着那里跳,然后发现。
谢谢大家。