我正在研究atmel编程,我正在尝试创建一个程序,其函数返回一次为true的布尔值,第二次为false,取决于之前是否调用它或不返回true返回true第一次是第二次它返回false而我会使程序像::
if(boolean == true){
//execute the code if the button is pressed for the first time
//switch on a led
}else{
//execute the code if the button is pressed for the second time
//turn off the led
}
该函数类似于::
bool ledToggle(){
if(function is called for the first time)
return true;
}else{
return false;
}
答案 0 :(得分:4)
你可以使用静态标志,例如
bool ledToggle()
{
static bool state = false;
state = !state;
return state;
}
答案 1 :(得分:3)
函数中的静态变量会记住调用函数之间的值:
bool ledToggle()
{
static bool led_is_on = false;
led_is_on = !led_is_on;
return led_is_on;
}
每次调用都会使结果翻转为true和false。
答案 2 :(得分:3)
如果您的编译器支持它(未定义STDC_NO_ATOMICS
的C11),则使用:
#include <stdatomic.h>
bool ledToggle()
{
static atomic_int state; // initialised to zero by default
state ^= 1; // XOR is atomic, state = !state is not atomic.
return state; // rely on implicit cast to bool
}
这将是线程安全的。