【问题标题】:Using reserved name for a variable为变量使用保留名称
【发布时间】:2020-04-08 13:54:58
【问题描述】:
  1. 问题是 int min 重新声明为另一种符号;

  2. 尝试查代码,改整数,但我还是一样的问题,不管我改成0 1 2 3 4。(不好意思,我英文不好,刚开始通过 Google 和 YouTube 从教育中学习编码。)

  3. 这是我的代码:

    int int_count;
    int sec=0;
    int min=1;
    
    
    int flag_One_Time_Send_Old = 100;
    void timer0_ISR(void)                  // the RTCC (timer0) overflows (255->0). 
    if(--int_count==0)            // per second.
      sec++;
      int_count=INTS_PER_SECOND;
      if (sec==60)
     {
         min++;
         sec=0;
        Serial.print("min: ");
        Serial.println(min);
      }
        Serial.print("sec: ");
    Serial.println(sec);
    

    }

感谢帮助

【问题讨论】:

  • 不要使用min 作为变量名。 Aduino 将其用作 min()(宏)函数
  • 我可以写信给我吗?
  • 什么样本?你不知道如何重命名变量?
  • 除了使用保留关键字之外,我想指出在 ISR 中使用 Serial.print() 不是一个好习惯。请阅读 Nick Gammon 的 Interrupts,以更好地了解如何编写 ISR。

标签: arduino arduino-uno arduino-esp8266 arduino-c++


【解决方案1】:

我希望这对你有用。 min 已重命名为 minute,因为 min 被 Arduino 用作 min() 宏函数。

int int_count; int sec=0; int minute=1;  //min renamed as minute

int flag_One_Time_Send_Old = 100;
void timer0_ISR(void)                  // the RTCC (timer0) overflows (255->0). 
if(--int_count==0)            // per second.
  sec++;
  int_count=INTS_PER_SECOND;
  if (sec==60)
 {
     minute++;
     sec=0;
    Serial.print("minutes: ");
    Serial.println(minute);
  }
    Serial.print("sec: ");
Serial.println(sec);
}

【讨论】:

  • 我认为它更像是 TIME/RTC 上下文中的minutes。但这绝对是最糟糕的宏名称......
  • @KIIV 我再次重命名了变量。我希望这个对你有用。
  • 虽然这解决了 OP 使用保留关键字的问题。但是,这是建立在 ISR 的不良做法之上的。在 ISR 中,所有中断都被禁用,因此它应该尽可能短,并且永远不要执行任何 I/O 操作(这是一个漫长而缓慢的过程),这包括Serial.print()。请阅读 Nick Gammon 的如何使用 Interrupt 以更好地理解编写 ISR。