仅在 C 中执行一次代码的更简洁的方法?
Posted
技术标签:
【中文标题】仅在 C 中执行一次代码的更简洁的方法?【英文标题】:A more consise way of executing code once only in C? 【发布时间】:2019-09-01 01:14:14 【问题描述】:我经常有以下形式的代码:
uint8_t bool_var = 0;
for (;;)
...
if (!bool_var)
do_something();
bool_var = 1;
...
是否有更简洁、非宏的方式来表达 if 条件和块?
【问题讨论】:
你必须扩展上下文,因为代码通常只会运行一次,除非你做一些事情让它再次运行,比如把它放在一个循环中。 对我来说看起来非常可读和简洁。在 C++ 中,你可以用函子做一些技巧,但在纯 C 中,任何更短的东西都会使它变得神秘 IMO。 @DavideVisentin - 所以不要再次进入这个块进行 255 次迭代? @DavideVisentin 我一直在考虑这一点,但最终它会结束,尤其是在uin8_t
s 的 ATMEGA 上。
如果您排除宏来隐藏代码,我认为这是最好的方法。如果您有for(int i=0; i<...; ++i)
,您可以删除布尔变量并将其替换为if (i==0)
,但除此之外......
【参考方案1】:
您的代码在大多数情况下都尽可能易读和简单。
但是,出于非常特定的目的,您可能会发现自己总是想调用一个函数,但有时却没有效果。那么在函数指针上使用一些技巧也许是有意义的:
typedef void func_t (void);
...
func_t* do_stuff = do_something;
...
while(stuff) // this code can't be changed for whatever reason
do_stuff();
在这种情况下,你可以想出这个:
void nop (void)
...
do_stuff = nop;
现在您可以继续拨打do_stuff
,但不会发生任何事情。
【讨论】:
以上是关于仅在 C 中执行一次代码的更简洁的方法?的主要内容,如果未能解决你的问题,请参考以下文章