Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 06.05.2021
Сообщений: 242

Макрос не работает

15.10.2022, 11:59. Показов 874. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Читаю про макросы. Написано следующее:
Макрос может состоять не только из одного выражения. Например макрос, который меняет значения двух переменных:

#define SWAP(type, a, b) type tmp = a; a = b; b = tmp;
Поскольку мы первым параметром передаем тип, данный макрос будет работать с переменными любого типа:

SWAP(int, num1, num2)
SWAP(float, num1, num2)
Я у себя пишу следующее:

C++
1
2
3
4
5
6
7
8
9
10
11
#define SWAP(type, a, b) type tmp = a; a = b; b = tmp;
 
int main()
{
    int val = 0;
    int val1 = 15;
    int val2 = 21;
    val = SWAP (int, val1, val2);
 
    return 0;
}
Выдаёт ошибку - использование имени типа не допускается.

Если писать вот так

C++
1
2
3
4
5
6
7
8
9
10
11
#define SWAP(type, a, b) type tmp = a; a = b; b = tmp;
 
int main()
{
    int val = 0;
    int val1 = 15;
    int val2 = 21;
    val = SWAP (val1, val2);
 
    return 0;
}
ТО пишет, что требуется точка с запятой. Вопрос, как мне использовать этот макрос?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.10.2022, 11:59
Ответы с готовыми решениями:

Макрос делает копию листа и сохраняет в новую книгу, но макрос в новой не работает
Есть макрос в книге. Он копирует текущий лист, создает новую книгу и копирует в новую книгу лист. На копируемом листе есть кнопки с...

Макрос не работает с полным диапазоном текста, работает только до 99 ячейки
Добрый вечер. Вот есть макрос. Он должен брать из диапазона в столбце А данные (их дофига и разное кол-во всегда, в макросе поставил...

Макрос работает, а код, преобразованный из макроса - не работает
Здравствуйте! Подскажите пожалуйста, почему функция выдаёт ошибку "32538: в TempVar можно хранить только данные. Нельзя использовать для...

7
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
15.10.2022, 12:09
Макрос просто подставляет свое содержимое в код.

Соответственно из
Цитата Сообщение от Ballantrae Посмотреть сообщение
#define SWAP(type, a, b) type tmp = a; a = b; b = tmp;
Цитата Сообщение от Ballantrae Посмотреть сообщение
    val = SWAP (int, val1, val2);
Вы получите что-то вроде
C++
1
    val = int tmp = val1; val1 = val2; val2 = tmp;
Похоже, вам надо что-то вроде
C++
1
    SWAP(int, val1, val2)
0
1 / 1 / 0
Регистрация: 06.05.2021
Сообщений: 242
15.10.2022, 14:15  [ТС]
Цитата Сообщение от lemegeton Посмотреть сообщение
Похоже, вам надо что-то вроде
Ну вот не работает что-то, говорит - использование имени типа не допускается.

Я туплю, всё оказалось очень просто. Этот макрос меняет местами две переменных, его не получится приравнять к какой-то третьей переменной.
0
Заблокирован
15.10.2022, 14:33
Цитата Сообщение от Ballantrae Посмотреть сообщение
его не получится приравнять к какой-то третьей переменной.
Почему ?

Добавлено через 2 минуты
Точнее что именно "приравнять" нужно ?

Добавлено через 8 минут
Цитата Сообщение от Ballantrae Посмотреть сообщение
Макрос не работает
Работает макрос

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
#define SWAP(type, a, b) type tmp = a; a = b; b = tmp;
 
int main()
{
    int val1 = 15;
    int val2 = 21;
    std::cout << val1 << ' ' << val2 << std::endl;
    SWAP (int, val1, val2);
    std::cout << val1 << ' ' << val2 << std::endl;
    return 0;
}
Code
1
2
15 21
21 15
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12925 / 6793 / 1819
Регистрация: 18.10.2014
Сообщений: 17,190
15.10.2022, 14:35
Цитата Сообщение от Ballantrae Посмотреть сообщение
Я у себя пишу следующее:

C++
1
2
3
4
5
6
7
8
#define SWAP(type, a, b) type tmp = a; a = b; b = tmp;
 
int main()
{
    int val = 0;
    int val1 = 15;
    int val2 = 21;
    val = SWAP (int, val1, val2);
Вопрос, как мне использовать этот макрос?
Так а зачем вы пишете val =? Откуда взялась такая идея?

Вы меняете местами переменные val1 и val2. Вот и меняйте их

C++
1
SWAP (int, val1, val2);
Все.

Переменная val здесь соврешенно ни при чем. Зачем вы пытаетесь что-то при этом присваивать в val?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.10.2022, 14:35
Цитата Сообщение от Ballantrae Посмотреть сообщение
как мне использовать этот макрос?
выбрось его в мусорное ведро.


C++
1
2
3
4
5
6
7
8
9
10
11
12
#define SWAP(a, b) { decltype(a) tmp = a; a = b; b = tmp; } void()
 
#include <cassert>
 
int main()
{
    int val1 = 15;
    int val2 = 21;
    SWAP(val1, val2);
    assert(val1 == 21);
    assert(val2 == 15);
}
1
87 / 87 / 18
Регистрация: 11.06.2018
Сообщений: 302
15.10.2022, 15:01
Цитата Сообщение от Ballantrae Посмотреть сообщение
Ну вот не работает что-то, говорит - использование имени типа не допускается.
Братан, ты чего?!

Цитата Сообщение от Ballantrae Посмотреть сообщение
Я туплю, всё оказалось очень просто. Этот макрос меняет местами две переменных, его не получится приравнять к какой-то третьей переменной.
Тебе же и написали, блин, в посте №2, что надо вместо val = SWAP (val1, val2) писать просто SWAP(int, val1, val2).
Ты как-то развивай что-ли уровень понятливости, пригодится в карьере. А то вон SmallEvil и TheCalligrapher вынуждены были почти полностью тоже самое написать еще раз. Нельзя так расходовать интеллектуальный ресурс форума, не хватит на всех.
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
15.10.2022, 18:43
Цитата Сообщение от ablex Посмотреть сообщение
Ты как-то развивай что-ли уровень понятливости, пригодится в карьере
Ballantrae, в качестве упражнения попробуй поменять местами значения переменных два раза подряд. Типа

C
SWAP (int, val1, val2);
SWAP (int, val1, val2);
Узнаешь много чего полезного
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2022, 18:43
Помогаю со студенческими работами здесь

Не работает макрос
Добрый день помогите макрос не срабатывает хотя должен переносить данные с одного листа на другой он переносит но не все данные.ublic Sub...

Не работает макрос
Добрый день. Есть макросы:#define ACTION(var, value) int var = value; #define EXEC_ACTION(value, handler, ...) handler(value,...

Не работает макрос
Всем привет, есть 3 файла, 1 из них берет данные из двух других. На старых версиях Office, т.е. на 2007 все работает, на 2010 версии и...

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

Не работает макрос
в лабораторной работе у меня надо написать макрос: создать макроопределение (некий PRINT_TYPE) в зависимости от которого новосозданная...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru