#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)
, некорректное, но компилируемое.