首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数的交替行为:如何检测函数调用者?

函数的交替行为:如何检测函数调用者?
EN

Stack Overflow用户
提问于 2022-08-23 20:38:05
回答 2查看 70关注 0票数 0

我有一个函数,每当一个标志被调用时,它都会切换,这是反复进行的,每次调用该函数时,它都有一个交替的行为。但是如果我用不同的参数多次调用这个函数呢?当然,我的切换标志只应该由相同的函数调用切换。是否有一种方法来检测,有某种静态行为的标志,但为每个函数调用者的一种行为?

代码语言:javascript
复制
void showText(uint8_t col, uint8_t line, const char *text, bool blinking)
{
    if(blinking)
    {
        static bool flag = false;           
        
        if(flag)
        {
            lcd_setcursor(col, line);
            for(int i = 0; i < strlen(text); i++)
            {
                lcd_data(' ');
            }
        }       
        else
        {
            lcd_setcursor(col, line);
            lcd_string(text);       
        }
        
        flag = !flag;

    }
    
    else
    {
        lcd_setcursor(col, line);
        lcd_string(text);
    }
}
EN

回答 2

Stack Overflow用户

发布于 2022-08-23 22:02:04

代码语言:javascript
复制
void showText( uint8_t col, uint8_t line, const char *text, bool blinking, bool* flag_ptr ) {
   ...

   if ( *flag_ptr ) { ... } else { ... }

   *flag_ptr = !*flag_ptr;

   ...
}

呼叫站点A:

代码语言:javascript
复制
static bool flag = false;  
showText( ..., &flag );

呼叫B站点:

代码语言:javascript
复制
static bool flag = false;  
showText( ..., &flag );
票数 2
EN

Stack Overflow用户

发布于 2022-08-23 23:59:35

您还可以让标志指针决定是否闪烁:

代码语言:javascript
复制
static bool blinkstat1 = false;
static bool blinkstat2 = false;
// Show with blinking
showText(col1, line1, text1, &blinkstat1);
// Show with blinking
showText(col2, line2, text2, &blinkstat2);

// Show text1 again w/o blinking
showText(col1, line1, text1, NULL);


void showText(uint8_t col, uint8_t line, const char *text, bool* blinking ) {
    lcd_setcursor(col, line);
    if (blinking != NULL) {
        // Blink
        if ( *blinking ) { 
            for(int i = 0; i < strlen(text); i++) {
                lcd_data(' ');
            }
        } else { 
            lcd_string(text);
        }
        *blinking = !*blinking;
    } else {
        // Just show text non-blinking
        lcd_string(text);
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73464803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档