【问题标题】:C doesn't recognize var - I must be overlooking something simple. [closed]C 不能识别 var - 我必须忽略一些简单的东西。 [关闭]
【发布时间】:2014-02-05 21:14:56
【问题描述】:

由于错误,我认为 print() 中的代码没有看到 for().n.b 中的计数器。代码适用于 Propeller 微控制器。 for() 过去没有问题。非常感谢

#include "simpletools.h"  // for print on my microcontroller platform
void main(void) {
    for(int x = 1; x <= 20; x++); {
        // *** error next line> error: 'x' undeclared (first use in this function)
        print("x = %d\n", x);
        high(14);
        pause(500);
        low(14);
        pause(500);
    }
}

【问题讨论】:

  • 你用分号关闭for的范围...
  • 我正要发布我对void main 的惯常咆哮,但对于像您正在使用的微控制器平台这样的嵌入式系统来说,这可能是正确的。顺便说一句,真的是print 而不是printf
  • 许多编译器会警告您,半后跟这样的大括号可能是无意的空体。您确定已将编译器上的警告级别调高到 11 级吗?
  • 每个人都是对的。使用 -Wall 进行编译应该会有很大帮助,而且使用分号关闭 for 循环这一事实肯定是问题的一部分,如果不是问题本身的话。我也相信你必须在循环中使用 int i 之前声明它,至少在 C99 中是这样。我不确定那部分是否属实,但这是我被告知的。
  • Keith:我认为 uCon 可能需要 main 上的空白,但我想读一下咆哮。有链接吗?

标签: c variables for-loop microcontroller


【解决方案1】:

尝试删除for 之后但{ 之前的分号。

改变这个:

for(int x = 1; x &lt;= 20; x++); {

到这里:

for(int x = 1; x &lt;= 20; x++) {

; 结束 for 循环。您在代码中所做的是有一个完整的for 循环,后跟一个不相关的代码块。 x 仅在 for 循环的范围内可见,这意味着直到那个错误的分号。

【讨论】:

  • 我添加了一些关于为什么分号错误的解释。
  • 除此之外,我还被告知 C 不喜欢在循环声明中声明变量时使用它。所以,这也可以尝试 - 在循环之前声明变量,然后在循环内初始化/使用它。
  • 非常感谢 - 解决方案和原因。一个分号可以毁掉一整天。我不喜欢在 args 中声明,但拼命想找到答案。
【解决方案2】:

你也可以试试这个:

void main(void) {
    int x = 1;
    for(; x <= 20; x++) {
        print("x = %d\n", x);
        high(14);
        pause(500);
        low(14);
        pause(500);
    }
}

【讨论】:

    【解决方案3】:

    您的问题是“C 语言”对吗?所以我认为你应该首先在顶部声明值“int x”。

    【讨论】:

      猜你喜欢
      • 2014-04-26
      • 2014-09-11
      • 2015-04-09
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多