Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
14.12.2011, 01:24     [C++] Директива #define. В виде макроса определен шаблон функции. #1
Здравствуйте!

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

В программке присутствует директива #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;  \
}
В чем может быть проблема??

спасибо!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2011, 01:24     [C++] Директива #define. В виде макроса определен шаблон функции.
Посмотрите здесь:

Директива #define c директивой #else C++
C++ Define внутри макроса
Директива #define для нахождения наименьшего из двух чисел. Сумма ряда C++
Define внутри макро-функции C++
C++ Объявление функции через #define
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
Заблокирован
14.12.2011, 01:50     [C++] Директива #define. В виде макроса определен шаблон функции. #2
У тя там ошибочка небольшная в макросе:

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;                \   
}
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
14.12.2011, 01:55  [ТС]     [C++] Директива #define. В виде макроса определен шаблон функции. #3
Я как бы такой вариант тоже пробовал, но увы!
Миниатюры
[C++] Директива #define. В виде макроса определен шаблон функции.  
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
14.12.2011, 01:58  [ТС]     [C++] Директива #define. В виде макроса определен шаблон функции. #4
такой вариант работает

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;     \
}
но явно не подходит, с точки зрения форматирования кода!
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
14.12.2011, 02:21  [ТС]     [C++] Директива #define. В виде макроса определен шаблон функции. #5
Блин теперь работает, непонятно!)
Миниатюры
[C++] Директива #define. В виде макроса определен шаблон функции.  
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.12.2011, 02:26     [C++] Директива #define. В виде макроса определен шаблон функции. #6
Infinity3000, на liveworkspace все работает. Почему шаблоны не использовать?
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
14.12.2011, 03:23  [ТС]     [C++] Директива #define. В виде макроса определен шаблон функции. #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Хочется, если можно так выразиться, досконально изучить Препроцессорные средства!

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

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 не должно быть пробелов! вот вся ошибка!))) извините за беспокойство!
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
14.12.2011, 11:00     [C++] Директива #define. В виде макроса определен шаблон функции. #8
Цитата Сообщение от Infinity3000 Посмотреть сообщение
Понял свою ошибку)) После Backslash не должно быть пробелов! вот вся ошибка!)))
Здорово! А как ты это увидал? Ведь так просто глазом не увидишь.
И как я был прав 100 лет назад, когда в самопальном редакторе при записи обрубал конечные пробелы! Идея была проста, "если чего не видно - того и нет" Так же я поступил и с табуляцией, только наоборот.
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
14.12.2011, 13:03  [ТС]     [C++] Директива #define. В виде макроса определен шаблон функции. #9
Цитата Сообщение от Байт Посмотреть сообщение
Здорово! А как ты это увидал? Ведь так просто глазом не увидишь.
Чисто случайно) Просто хотел за коментить код поставил пробел, полезли ошибки, убрал пробел, все четко работает!!!

Кстати коментарии тоже не ставяться, ни однострочные // ни многосрочные /**/. Сразу лезут ошибки!
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
14.12.2011, 14:24     [C++] Директива #define. В виде макроса определен шаблон функции. #10
Infinity3000, Спасибо! Ошибочка (скорее это ошибочка разработчиков или их негуманное отношение к пользователям) такова, что без опыта не разберешься. Сам я с такими ситуациями не сталкивался. но в случае чего теперь буду знать куда копать.

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

Не по теме:

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


И еще вопрос - на каком трансляторе эта бяка обнаружилась?
Bers
Заблокирован
14.12.2011, 14:26     [C++] Директива #define. В виде макроса определен шаблон функции. #11
Байт, это от транслятора не зависит. Это правила работы с деррективами. Я сам офигел.
Действительно \ распространялась только на пробелы за ней, но не на то что после.
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
14.12.2011, 14:31     [C++] Директива #define. В виде макроса определен шаблон функции. #12
Попробовал на старинном BC 502 - и правда!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2011, 17:01     [C++] Директива #define. В виде макроса определен шаблон функции.
Еще ссылки по теме:

Упрощение вызова функции через #define C++
C++ Оформить в виде макроса и разместить их в отдельном модуле
Шаблон: Метод text() не определен для объекта класса TreeWidget C++

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

Или воспользуйтесь поиском по форуму:
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
14.12.2011, 17:01  [ТС]     [C++] Директива #define. В виде макроса определен шаблон функции. #13
Теперь по поводу комментариев(насколько я разобрался)

Код можно можно комментировать только с помощью многострочных комментариев /* */ и они должны располагаться до 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;     /*местами*/\
            }                           \
        }                               \
    }                                   \
}


// - не катят
Yandex
Объявления
14.12.2011, 17:01     [C++] Директива #define. В виде макроса определен шаблон функции.
Ответ Создать тему
Опции темы

Текущее время: 14:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru