34 / 22 / 13
Регистрация: 20.05.2022
Сообщений: 414
1

Директивы препроцессора

19.02.2023, 13:56. Показов 754. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача следующая при вычислении переменных в программе, дальше они проверяются. Но в зависимости от параметров, границы могут варьироваться. Собственно, чтобы не плодить внутри кода проверки через условия, я хотел бы перенести их в заголовок и определить с помощью препроцессора. Как лучше это сделать, можно на примере показать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.02.2023, 13:56
Ответы с готовыми решениями:

Директивы препроцессора Составить программу, использующую директивы препроцессора
1) Задать константы M1,M2,...,M5 и вычислить M1+ 2M2 + 3M3 + 4M4 + 5M5 2) С помощью директив #if,...

Директивы препроцессора
Разработать программу с двумя типами данных «точка» и «прямоугольник», причем второй тип...

Директивы препроцессора
Вот возникло 2 вопроса: 1)Как написать функцию-макрос, используя директиву define для вычисления...

Директивы препроцессора
Из всех директив только #include нужно обязательно ставить вначале кода, а остальные директивы...

9
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
19.02.2023, 14:04 2
JIupToH, ничего не понятно. Приведите минимальный пример, демонстрирующий то, что есть. И его модификацию, демонстрирующую то, что хотите видеть. Модификация не обязана быть компилируемой, просто псевдокод, выражающий ваши хотелки.
0
34 / 22 / 13
Регистрация: 20.05.2022
Сообщений: 414
19.02.2023, 14:16  [ТС] 3
zayats80888,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if(alpha = 0.9){
if (length == 10) {
        left = 0.789;
        right = 0.812;
    }
    else if (length == 50) {
        left = 0.122;
        right = 0.310;
    }
} else if(alpha = 0.99){
if (length == 10) {
        left = 0.890;
        right = 0.958;
    }
    else if (length == 50) {
        left = 0.003;
        right = 0.158;
    }
}
Добавлено через 2 минуты
И вынести эти условия из тела функции в директивы препроцессора
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
19.02.2023, 14:22 4
JIupToH, если alpha и length это рантайм параметры, то препроцессор тут не поможет.
Если я правильно понял, вам нужно в рантайме одной паре значений сопоставить другую пару. Сделать это можно через хэш-таблицу.
Правда если у вас всего четыре(пять с учетом "для всех остальных случаев") соответствий, то смысла в хэш-таблице особо нет.
0
Диссидент
Эксперт C
27709 / 17325 / 3811
Регистрация: 24.12.2010
Сообщений: 38,979
19.02.2023, 14:50 5
JIupToH, Просто через массивы
C
1
2
double alfa[] = {0.9, 0.99 .. };
left10 [] = { 0.789, 0.890 ... };
Или через массив структур

Добавлено через 1 минуту
Массив можно держать в файле
0
34 / 22 / 13
Регистрация: 20.05.2022
Сообщений: 414
19.02.2023, 15:15  [ТС] 6
zayats80888, Байт, это константы
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
19.02.2023, 15:33 7
Цитата Сообщение от JIupToH Посмотреть сообщение
это константы
Можно просто переписать ваш код в constexpr функцию, тогда если это константы(константные выражения), то всё будет вычисленно на этапе компиляции.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct border
{
    double left, right;
};
 
constexpr border getBorder(double alpha, int length)
{
    if (alpha == 0.9)
    {
        if (length == 10)
            return {0.789, 0.812};
        else if (length == 50)
            return {0.122, 0.310};
    }
    else if (alpha == 0.99)
    {
        if (length == 10)
            return {0.890, 0.958};
        else if (length == 50)
            return {0.003, 0.158};
    }
    return {}; // значение по-умолчанию
}
0
Диссидент
Эксперт C
27709 / 17325 / 3811
Регистрация: 24.12.2010
Сообщений: 38,979
19.02.2023, 16:07 8
JIupToH, Все зависит от того, какие цели ты преследуешь.
Если важно, чтобы параметры можно было менять, не перетранслируя программу, то самое им место в текстовом файле. Правда, придется писать программку чтения их этого файла. Хотя есть уже готовые решения, типа Setting. Лично я давно-давно "изобрел" механизм хранения таких переменчивых данных в едином текстовом файле. Так и тестовые константы (удобно для перевода на другие языки), и даже менюшки, и вот такие числовые параметры.
Если же тебе нужен только удобный обзор кода программы, то тут ты сам себе советчик. Но я бы выбрал вариант с массивом структур, заполненным константами.
0
34 / 22 / 13
Регистрация: 20.05.2022
Сообщений: 414
19.02.2023, 19:31  [ТС] 9
Байт, значения меняться не будут, и хотел сделать это через макрос.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12728 / 7558 / 1762
Регистрация: 25.07.2009
Сообщений: 13,934
20.02.2023, 01:00 10
JIupToH, если пишете на С++, как вариант, можно в структуру конструктор добавить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct border {
    double left, right;
 
    border(double alpha, unsigned length) {
        // а здесь вот это всё...
    }
};
 
//...
 
border b(alpha, length); 
border * pAnotherBorder = new border(alpha, length);
//...
delete pAnotherBorder;
Или как-то так...
0
20.02.2023, 01:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2023, 01:00
Помогаю со студенческими работами здесь

Директивы препроцессора
Помогите разобраться. Я не могу понять как работают директивы препроцессора. Где находится файл...

Директивы препроцессора
- С использованием директивы #define реализуйте макрос, который возводит число во вторую степень. С...

Директивы препроцессора!
Всем здраствуйте!!! Есть такое объявление : #define _BV(n) (1<<n) //макрос манипулирования...

Директивы препроцессора
помогите плз с прогой Директивы препроцессора Составить программу, использующую директивы...

Директивы препроцессора
Добрый вечер, форумчане. Возникла проблема: В условии задания имеется - базовый класс и 2-х...

Директивы препроцессора.Ошибка #error не работает.
Ребят программа должна выдавать сообщение об ошибке и прекращать компиляцию.,если,X или Y...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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