【问题标题】:Using #define in a while loop在while循环中使用#define
【发布时间】:2011-05-10 04:16:19
【问题描述】:

我正在学习如何用 C 编程,但我不知道如何使用常量进行循环。我的理解是,在 C 中使用常量值的最佳方法是通过 #define 语句(如果我错了,请纠正我)。但它似乎不起作用。

这是我的代码。

#include <stdio.h>

#define NUM = 3

void main(int argc, char *argv[]){

  int i=0;

  while(i<NUM){
    printf("foo ");
    i++;
  }

  return;
 }

当我尝试编译代码时,出现以下错误。

helloWorld.c:在函数“main”中:
helloWorld.c:9:错误:“=”标记之前的预期表达式

(对于那些不想计算的人,第 9 行是 while 循环声明)。 我如何使用预处理器函数来做到这一点,这是在 C 中使用常量值的最佳方式吗?我可以使用 'const' 让它工作,但我认为这不是最好的。

【问题讨论】:

  • -1 for 1 upvote for this question....

标签: c loops c-preprocessor


【解决方案1】:

使用

#define NUM 3 而非 #define NUM = 3

【讨论】:

    【解决方案2】:

    您使用#define 来声明一个,在某些情况下您可以将其视为一种常量。

    实际上,编译器会将出现的任何宏替换为宏文本。在你的情况下,= 3。这会导致while(i &lt; = 3),这是一个语法错误。

    宏的正确写法是:

    #define NUM 3
    

    要定义一个实常数,请使用const 关键字。

    【讨论】:

    • 我喜欢将const 读作“只读”:const 并不是一个真正的常量 :)
    【解决方案3】:

    #define NUM = 3
    使用

    #define NUM 3

    【讨论】:

      【解决方案4】:

      学习使用您的编译器仅预处理选项,这样您就可以解决这些问题 自己。

      例如

      % gcc -E foo.c > bar.c
      

      您可以使用 bar.c 中 line 指令宏的偏移量找到第 9 行,但它显示得很清楚 你的错误:

      while(i< = 3){
      

      【讨论】:

        【解决方案5】:
        #define NUM = 3
        

        应该是

        #define NUM 3
        

        【讨论】:

        • +1 表示正确的陈述,但 -1 表示没有解释为什么它不扩展为 while (i &lt;= 3),不正确但可编译。
        猜你喜欢
        • 2011-08-11
        • 1970-01-01
        • 2023-04-08
        • 2021-07-18
        • 2016-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-17
        相关资源
        最近更新 更多