c函数,在每次调用时返回不同的值

时间:2014-04-17 11:46:15

标签: c atmel

我正在研究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;

}

3 个答案:

答案 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
}

这将是线程安全的。