Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
2 / 2 / 1
Регистрация: 11.07.2016
Сообщений: 152

#define: макросы

12.08.2017, 20:28. Показов 1972. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Веду разбирательство с директивами препроцессора и тут возник вопрос в чем смысл использования макросов, если те же самые действия можно прописать в теле программы или прибегнуть к использованию функции? Я написал код с использованием макроса и по мне гораздо проще не прибегая к его использованию.Прошу объяснить каким-нибудь простым конкретным примером ,если можно....
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<stdio.h>
#include<math.h>
#pragma warning(disable:4996)
 
#define SUMMARRAY(x,y)   for (char i = 0; i < y; i++) x[0]+=x[i]; 
 
 
int main()
{
    
    int massiv[10] = { 0 };
 
    for (int i = 0; i < 10; i++)
    {
        massiv[i] = pow(i, 5);  
    }
 
    SUMMARRAY(massiv, 10);
 
    fprintf(stdout,"%d",massiv[0]);
    
    getch();
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.08.2017, 20:28
Ответы с готовыми решениями:

Как реализовать директиву #define для создания шаблона отпределения #define ?
Здравствуйте уважаемые. При написании программы появилась необходимость задать шаблон создания #define через #define (извините за...

#define
Не работает следующий пример - если удалить строку 5 #define DEBUG, то программа должна была по идее выводить &quot;Output if DEBUG is not...

#define и const
В чем их различия? Делая тест по подготовке к ЕГЭ, в заданиях части С были фрагменты кода, и объявление константы, производилось через...

31
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
12.08.2017, 21:39
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Roman2947 Посмотреть сообщение
Надо искать кому напроситься в поддаваны
Самый хороший вариант - это напроситься в подаваны к самому себе

Цитата Сообщение от LightProger Посмотреть сообщение
один вечер поcвящаю изучению Linux, следующий вечер изучению языка Си
Кстати, это тоже правильный подход. Нужно уметь работать под разными операционками. И нужно уметь программировать под разные операционки. При таком подходе есть очень хорошие возможности на ранних стадиях обучения понять то, чего некоторые начинают понимать лишь после многих лет работы
0
2 / 2 / 1
Регистрация: 11.07.2016
Сообщений: 152
12.08.2017, 21:47  [ТС]
Evg, придумывать задачи и решать их можно, но проблема в том, что я не смогу в итоге понять грамотно я ее решил или же нет...решить я возможно смогу и код будет работать, но примитивно...я думаю нужно решать те задачи, на которые есть ответы...чтоб в итоге можно было проверить себя и сделать анализ...тут и будет почерпнут опыт, не так ли?

Добавлено через 5 минут
Цитата Сообщение от Evg Посмотреть сообщение
Самый хороший вариант - это напроситься в подаваны к самому себе
звучит красиво,но иногда помощь необходима...

Добавлено через 1 минуту
Цитата Сообщение от LightProger Посмотреть сообщение
я себе сделал расписание, один вечер поcвящаю изучению Linux, следующий вечер изучению языка Си, и так по порядку, надо еще английский подтянуть, но времени не хватает.
хороший подход,хотелось бы и самому выйти на подобный уровень,но время....
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
12.08.2017, 21:52
Цитата Сообщение от Roman2947 Посмотреть сообщение
но проблема в том, что я не смогу в итоге понять грамотно я ее решил или же нет
Для начала это не так уж и важно

Можно сделать небольшой level-up. После того, как ты задачу реализовал, поставить себе задачу по какому-нибудь дальнейшему развитию своей же собственной программы. В процессе развития ты сам увидишь много недочётов в твоей реализации: то, о чём ты не задумывался при написании простой версии программы, обязательно даст о себе знать при реализации более сложной программы на базе простой

Цитата Сообщение от Roman2947 Посмотреть сообщение
я думаю нужно решать те задачи, на которые есть ответы
Под словом "задача" я вовсе не понимал задачу в её классическом понимании. Я имел в виду более широкий смысл типа "задание". Т.е. для начала: написать программу "угадай число" или "крестики-нолики". Тут нет правильного ответа. При этом ты сам в состоянии протестировать правильность работы своей программы. Просто работая над такими примитивными программами-играми, ты столкнёшься с кучей РЕАЛЬНЫХ проблем, которые надо решать. И эти проблемы не имеют в общем-то никакого отношения к конкретному языку программирования

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

Добавлено через 36 секунд
Цитата Сообщение от Roman2947 Посмотреть сообщение
но иногда помощь необходима.
Дык на то форум и существует
0
2 / 2 / 1
Регистрация: 11.07.2016
Сообщений: 152
12.08.2017, 22:02  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Реальный опыт приобретается в программировании реальных приложений, а не задач из книги
у меня складывается такое впечатление, что опыт в программировании реальных приложений и опыт решения задач из книги это разные вещи.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
12.08.2017, 22:11
Цитата Сообщение от Roman2947 Посмотреть сообщение
что опыт в программировании реальных приложений и опыт решения задач из книги это разные вещи.
Абсолютно разные.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
12.08.2017, 22:16
Цитата Сообщение от Roman2947 Посмотреть сообщение
что опыт в программировании реальных приложений и опыт решения задач из книги это разные вещи
Разумеется, это совершенно разные вещи. Но, потратив какое-то время на решение книжных задач, ты всё-таки облегчишь себе жизнь при работе с реальным программированием. И ключевые слова здесь - "какое-то время"

Здесь можно совершенно нормально совмещать и то и другое. Например, понадобилось тебе при программировании игры отсортировать таблицу рекордов. Та на какое-то время занялся решением задач по сортировке, а потом обратно вернулся к программированию игры. Ну или что-то в этом духе
0
2 / 2 / 1
Регистрация: 11.07.2016
Сообщений: 152
12.08.2017, 22:30  [ТС]
Evg, Начинаю понимать о чем Вы,но чувствую, что мне еще нужно потратить какое-то время, чтобы застолбить элементарные знания по базовому курсу. Чтобы в последующем не спотыкаться на синтаксисе или логической ошибке...Ну а по поводу реального программирования,меня ввело немного в растерянность...Пока не могу и представить алгоритм решения той же задачи крестики нолики.Вот не знаю с какой стороны подойти к этой задаче....с чего нужно начинать?каким образом происходит обучение этому?
0
 Аватар для LightProger
42 / 42 / 16
Регистрация: 29.12.2016
Сообщений: 291
12.08.2017, 22:52
Roman2947, Я свои первые "крестики-нолики", и игру "Угадай число", калькулятор, писал по учебнику, потом разбирался как это устроено и на основе их писал другие программы. Вот допустим сегодня, я по видео из ютуба написал "Валидатор флагов, для запуска программ", потом этот код применю уже где-нибудь, в реальном проекте.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
 
//Декларация массива валидных флагов
const char * const allowedFlags[] = { "--size", "--sort", "--antg" };
 
//Вычисление размера массива валидных флагов
const unsigned int const allowedFlagsLength = sizeof allowedFlags / sizeof allowedFlags[0];
 
//Функция сравнения валидных и не валидных флагов
void validateFlags(const char * const flags[], const int const length)
{
  bool flagExists; //Переменная состояния флага
  int incorrectFlagIndex = -1; //В эту переменную будет сохранен индекс массива некорректного флага
 
  //Первый цикл проходит по массиву флагов которые мы передаем из командной строки
  for (int i = 1; i < length; i++)
    {
      flagExists = false; // Обнуляем состояние флага при каждой итерации цикла
 
      //Второй вложенный цикл проходит по массиву задекларированных флагов
      for (int j = 0; j < allowedFlagsLength; j++)
        {
          //Сравниваем флаги введенные из командной строки и задекларированные в массиве
          if (strcmp(flags[i], allowedFlags[j]) == 0)
            {
              flagExists = true;
              incorrectFlagIndex = -1;
            }
          else { incorrectFlagIndex = i; }
        }
 
      //Если флаг не валидный, сказать об этом и выйти из программы
      if (!flagExists && incorrectFlagIndex > -1)
        {
          printf("[-] Error: %s incorrect flag was given!\n", flags[incorrectFlagIndex]);
          exit(EXIT_FAILURE);
        }
    }
}
 
int main(const int const argc, const char * const argv[])
{
  if (argc > 1) validateFlags(argv, argc);
 
  printf("[+] Congratulations!\n");
 
  return EXIT_SUCCESS;
}
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
12.08.2017, 23:27
Цитата Сообщение от Roman2947 Посмотреть сообщение
Пока не могу и представить алгоритм решения той же задачи крестики нолики.Вот не знаю с какой стороны подойти к этой задаче....с чего нужно начинать?каким образом происходит обучение этому?
Для начала можно тупым перебором. Если пользователь сделал ход такой, то машина делает ход такой. Понятно, что это получается тупое решение, но ведь можно начать хотя бы с него. Пусть решение тупое, но оно будет рабочим. Дальше можешь попытаться сделать решение менее тупым

На худой конец можно спросить совета в этом разделе https://www.cyberforum.ru/algorithms/ В идеале надо уметь понимать словесные или математические описания алгоритмов, а потом уже переводить их на конкретный язык программирования
0
2 / 2 / 1
Регистрация: 11.07.2016
Сообщений: 152
12.08.2017, 23:41  [ТС]
Evg, LightProger, Спасибо Вам,Вы мне действительно открыли глаза на те вещи, которые я не понимал до этого времени, растерянность была, не знал у кого и как спросить....теперь легче)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
12.08.2017, 23:42
Ну слава яйцам
0
 Аватар для LightProger
42 / 42 / 16
Регистрация: 29.12.2016
Сообщений: 291
12.08.2017, 23:46
Roman2947, Не за что! Обращайся, тут все открыты для общения! Поможем, чем можем!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.08.2017, 23:46

Идентификатор в #define
Требуется,чтобы за место чисел были их текстовые значения: например,вместо цифры 1, была надпись &quot;один&quot; А вопрос вот в...

Массив, константы и #define
Всем доброго дня! Сразу к делу. Есть большое желание иметь массив длиной в константу и саму эту константу для работы. Очевидно, что...

#define - что это?
#define HWREGBITW(x, b) \ HWREG(((unsigned long)(x) &amp; 0xF0000000) |...

Как пользоваться #define
#define I2CSE2P_IO_DEFAULTS { NULL,\ 0,\ (void (*)(void *))I2CSE2P_init,\ (void (*)(void *))I2CSE2P_tick} ...

Некорректно работает #define
По идее, если что-нибудь ввести, то программа должна попытаться выполнить это как команду то есть если пользователь ввел printf (Hello...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru