Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/29: Рейтинг темы: голосов - 29, средняя оценка - 4.86
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255

[C++] Директива #define. В виде макроса определен шаблон функции.

14.12.2011, 01:24. Показов 5480. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Есть проблема и мне она непонятна!

В программке присутствует директива #define в ней в виде макроса определен шаблон функции.


Но в чем проблема!

Так работает без проблем!
C++
1
#define template_obmen(type) void obmen_##type(type *mas,int n) {  type buf = mas[0];   mas[0] = mas[n-1];  mas[n-1] = buf;  }
Но стоит разбить эту строку, так она отказываеться работать

C++
1
2
3
4
5
6
7
#define template_obmen(type) \
void obmen_##type(type *mas,int n) \
{   
    type buf = mas[0]; \  
    mas[0] = mas[n-1]; \
    mas[n-1] = buf;  \
}
В чем может быть проблема??

спасибо!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.12.2011, 01:24
Ответы с готовыми решениями:

Директива #define c директивой #else
Учу Win32 API и столкнулся с таким примером как директиву #define можно использовать с директивой #else? Плюс тут еще куча ошибок непонятно...

Директива препроцессора define
Объясните пожалуйста, что означает define в Си. Если можно поподробнее и с примером. Знаю только, что это директива процессора.

Что делает директива #define ?
Что это значит? Задача с рядом Тейлора, 0.001 - это точность разложения. Опишите подробнее, почему так можно сделать? #define EPS 0.001

12
Заблокирован
14.12.2011, 01:50
У тя там ошибочка небольшная в макросе:

C++
1
2
3
4
5
6
7
#define template_obmen(type)       \
void obmen_##type(type *mas,int n) \
{                                  \
    type buf = mas[0];             \  
    mas[0] = mas[n-1];             \   
    mas[n-1] = buf;                \   
}
1
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
14.12.2011, 01:55  [ТС]
Я как бы такой вариант тоже пробовал, но увы!
Миниатюры
[C++] Директива #define. В виде макроса определен шаблон функции.  
0
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
14.12.2011, 01:58  [ТС]
такой вариант работает

C++
1
2
3
4
5
#define template_obmen(type)       \
void obmen_##type(type *mas,int n) \
{                                  \
    type buf = mas[0];             mas[0] = mas[n-1];     mas[n-1] = buf;     \
}
но явно не подходит, с точки зрения форматирования кода!
0
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
14.12.2011, 02:21  [ТС]
Блин теперь работает, непонятно!)
Миниатюры
[C++] Директива #define. В виде макроса определен шаблон функции.  
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
14.12.2011, 02:26
Infinity3000, на liveworkspace все работает. Почему шаблоны не использовать?
1
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
14.12.2011, 03:23  [ТС]
Лучший ответ Сообщение было отмечено как решение

Решение

Хочется, если можно так выразиться, досконально изучить Препроцессорные средства!

Кстати, опять этот код перестал работать!

C++
1
2
3
4
5
6
7
#define template_obmen(type)        \
void obmen_##type(type *mas,int n)  \
{                   \
    type buf = mas[0];          \    
    mas[0] = mas[n-1];      \
    mas[n-1] = buf;         \
}
работает через раз, по непонятным причинам!!


Кстати таже проблемма и в MSVS 2008 & 2005! Бред какой то!!

Добавлено через 47 минут
Понял свою ошибку)) После Backslash не должно быть пробелов! вот вся ошибка!))) извините за беспокойство!
3
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
14.12.2011, 11:00
Цитата Сообщение от Infinity3000 Посмотреть сообщение
Понял свою ошибку)) После Backslash не должно быть пробелов! вот вся ошибка!)))
Здорово! А как ты это увидал? Ведь так просто глазом не увидишь.
И как я был прав 100 лет назад, когда в самопальном редакторе при записи обрубал конечные пробелы! Идея была проста, "если чего не видно - того и нет" Так же я поступил и с табуляцией, только наоборот.
1
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
14.12.2011, 13:03  [ТС]
Цитата Сообщение от Байт Посмотреть сообщение
Здорово! А как ты это увидал? Ведь так просто глазом не увидишь.
Чисто случайно) Просто хотел за коментить код поставил пробел, полезли ошибки, убрал пробел, все четко работает!!!

Кстати коментарии тоже не ставяться, ни однострочные // ни многосрочные /**/. Сразу лезут ошибки!
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
14.12.2011, 14:24
Infinity3000, Спасибо! Ошибочка (скорее это ошибочка разработчиков или их негуманное отношение к пользователям) такова, что без опыта не разберешься. Сам я с такими ситуациями не сталкивался. но в случае чего теперь буду знать куда копать.

Добавлено через 2 минуты

Не по теме:

Может это в FAQ поместить? Но это уже вопрос к модераторам.


И еще вопрос - на каком трансляторе эта бяка обнаружилась?
1
Заблокирован
14.12.2011, 14:26
Байт, это от транслятора не зависит. Это правила работы с деррективами. Я сам офигел.
Действительно \ распространялась только на пробелы за ней, но не на то что после.
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
14.12.2011, 14:31
Попробовал на старинном BC 502 - и правда!
1
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
14.12.2011, 17:01  [ТС]
Теперь по поводу комментариев(насколько я разобрался)

Код можно можно комментировать только с помощью многострочных комментариев /* */ и они должны располагаться до Backslash!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#define template_obmen(type)            \
void obmen_##type(type *mas,int n)      \
{                                       \
    for (int i = n - 1; i >= 1; --i)    \
    {                                   \
        for (int j = 0; j < i; ++j)     \
        {                               \
            if (mas[j] > mas[j + 1])    \
            {                           \
                int buble = mas[j]; /* меняем*/   \
                mas[j] = mas[j + 1];    /*элементы*/\
                mas[j + 1] = buble;     /*местами*/\
            }                           \
        }                               \
    }                                   \
}


// - не катят
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.12.2011, 17:01
Помогаю со студенческими работами здесь

Директива #define: из ANSI в UNICODE
В свойства проекта добавил такое определение препроцессора: MY_SYMBOL=&quot;My symbol&quot;. Мне нужна эта строка в юникоде, то есть: L&quot;My...

Директива #define для нахождения наименьшего из двух чисел. Сумма ряда
помогите решить Даны целые числа а и b. Используя директиву #define для нахождения наименьшего из двух чисел, вычислить значение ...

Define внутри макроса
Подкажите возможно ли написать макрос кот. создаст #define? например: #define MACRO(name) #define NAME name знаю, что напрямую...

Вывести значение макроса #define
Здравствуйте. Возникла проблема с #define. Нужно каким-нибудь способом вывести на экран значение макроса #define типа этого:#define...

[C++] define как определение константы vs. макроса
На всякий случай. Это не константа, а макрос Начало здесь: https://www.cyberforum.ru/cpp-beginners/thread634990.html


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru