Использование #define в цикле while

#c #loops #c-preprocessor

#c #циклы #c-препроцессор

Вопрос:

Я учусь программировать на 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. -1 за 1 голос по этому вопросу….

Ответ №1:

использовать

#define NUM 3 вместо #define NUM = 3

Ответ №2:

Используется #define для объявления макроса, который в некоторых случаях можно рассматривать как тип константы.

На самом деле, что происходит, так это то, что компилятор заменяет любые вхождения вашего макроса текстом вашего макроса. В вашем случае = 3 . Это приводит к while(i < = 3) , что является синтаксической ошибкой.

Правильный способ написания макроса -:

 #define NUM 3
  

Чтобы определить действительную константу, используйте const ключевое слово.

Комментарии:

1. Мне нравится читать const как «только для чтения»: const на самом деле это не настоящая константа 🙂

Ответ №3:

#define NUM = 3
использовать

#определить ЧИСЛО 3

Ответ №4:

Научитесь использовать опцию только предварительной обработки ваших компиляторов, чтобы вы могли решить эти проблемы самостоятельно.

Например

 % gcc -E foo.c > bar.c
  

Вы найдете строку 9, использующую смещения из макросов директивы line в bar.c, но это ясно видно
ваша ошибка:

 while(i< = 3){
  

Ответ №5:

 #define NUM = 3
  

должно быть

 #define NUM 3
  

Комментарии:

1. 1 за истинное утверждение, но -1 за то, что не объясняет, почему это не расширяется в while (i <= 3) , некорректное, но компилируемое.