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

#define: макросы

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

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
Веду разбирательство с директивами препроцессора и тут возник вопрос в чем смысл использования макросов, если те же самые действия можно прописать в теле программы или прибегнуть к использованию функции? Я написал код с использованием макроса и по мне гораздо проще не прибегая к его использованию.Прошу объяснить каким-нибудь простым конкретным примером ,если можно....
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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.08.2017, 20:28
Ответы с готовыми решениями:

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

#define
Не работает следующий пример - если удалить строку 5 #define DEBUG, то программа должна была по...

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

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

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

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

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

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

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

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

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

Добавлено через 36 секунд
Цитата Сообщение от Roman2947 Посмотреть сообщение
но иногда помощь необходима.
Дык на то форум и существует
0
2 / 2 / 1
Регистрация: 11.07.2016
Сообщений: 152
12.08.2017, 22:02  [ТС] 24
Цитата Сообщение от Evg Посмотреть сообщение
Реальный опыт приобретается в программировании реальных приложений, а не задач из книги
у меня складывается такое впечатление, что опыт в программировании реальных приложений и опыт решения задач из книги это разные вещи.
0
Неэпический
18099 / 10685 / 2061
Регистрация: 27.09.2012
Сообщений: 26,895
Записей в блоге: 1
12.08.2017, 22:11 25
Цитата Сообщение от Roman2947 Посмотреть сообщение
что опыт в программировании реальных приложений и опыт решения задач из книги это разные вещи.
Абсолютно разные.
0
Evg
Эксперт CАвтор FAQ
21280 / 8303 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.08.2017, 22:16 26
Цитата Сообщение от Roman2947 Посмотреть сообщение
что опыт в программировании реальных приложений и опыт решения задач из книги это разные вещи
Разумеется, это совершенно разные вещи. Но, потратив какое-то время на решение книжных задач, ты всё-таки облегчишь себе жизнь при работе с реальным программированием. И ключевые слова здесь - "какое-то время"

Здесь можно совершенно нормально совмещать и то и другое. Например, понадобилось тебе при программировании игры отсортировать таблицу рекордов. Та на какое-то время занялся решением задач по сортировке, а потом обратно вернулся к программированию игры. Ну или что-то в этом духе
0
2 / 2 / 1
Регистрация: 11.07.2016
Сообщений: 152
12.08.2017, 22:30  [ТС] 27
Evg, Начинаю понимать о чем Вы,но чувствую, что мне еще нужно потратить какое-то время, чтобы застолбить элементарные знания по базовому курсу. Чтобы в последующем не спотыкаться на синтаксисе или логической ошибке...Ну а по поводу реального программирования,меня ввело немного в растерянность...Пока не могу и представить алгоритм решения той же задачи крестики нолики.Вот не знаю с какой стороны подойти к этой задаче....с чего нужно начинать?каким образом происходит обучение этому?
0
41 / 41 / 16
Регистрация: 29.12.2016
Сообщений: 291
12.08.2017, 22:52 28
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
21280 / 8303 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.08.2017, 23:27 29
Цитата Сообщение от Roman2947 Посмотреть сообщение
Пока не могу и представить алгоритм решения той же задачи крестики нолики.Вот не знаю с какой стороны подойти к этой задаче....с чего нужно начинать?каким образом происходит обучение этому?
Для начала можно тупым перебором. Если пользователь сделал ход такой, то машина делает ход такой. Понятно, что это получается тупое решение, но ведь можно начать хотя бы с него. Пусть решение тупое, но оно будет рабочим. Дальше можешь попытаться сделать решение менее тупым

На худой конец можно спросить совета в этом разделе https://www.cyberforum.ru/algorithms/ В идеале надо уметь понимать словесные или математические описания алгоритмов, а потом уже переводить их на конкретный язык программирования
0
2 / 2 / 1
Регистрация: 11.07.2016
Сообщений: 152
12.08.2017, 23:41  [ТС] 30
Evg, LightProger, Спасибо Вам,Вы мне действительно открыли глаза на те вещи, которые я не понимал до этого времени, растерянность была, не знал у кого и как спросить....теперь легче)
0
Evg
Эксперт CАвтор FAQ
21280 / 8303 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.08.2017, 23:42 31
Ну слава яйцам
0
41 / 41 / 16
Регистрация: 29.12.2016
Сообщений: 291
12.08.2017, 23:46 32
Roman2947, Не за что! Обращайся, тут все открыты для общения! Поможем, чем можем!
0
12.08.2017, 23:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.08.2017, 23:46
Помогаю со студенческими работами здесь

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

#define - что это?
#define HWREGBITW(x, b) \ ...

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

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


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru