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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
#1

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

14.12.2011, 01:24. Просмотров 2748. Ответов 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;  \
}
В чем может быть проблема??

спасибо!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2011, 01:24     [C++] Директива #define. В виде макроса определен шаблон функции.
Посмотрите здесь:
Директива #define c директивой #else C++
Директива #define для нахождения наименьшего из двух чисел. Сумма ряда C++
C++ Define внутри макроса
Шаблон: Метод text() не определен для объекта класса TreeWidget C++
C++ Объявление функции через #define
Define внутри макро-функции C++
C++ Оформить в виде макроса и разместить их в отдельном модуле
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
14.12.2011, 01:55  [ТС]     [C++] Директива #define. В виде макроса определен шаблон функции. #3
Я как бы такой вариант тоже пробовал, но увы!
Миниатюры
[C++] Директива #define. В виде макроса определен шаблон функции.  
Infinity3000
1058 / 577 / 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
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
14.12.2011, 02:21  [ТС]     [C++] Директива #define. В виде макроса определен шаблон функции. #5
Блин теперь работает, непонятно!)
Миниатюры
[C++] Директива #define. В виде макроса определен шаблон функции.  
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.12.2011, 02:26     [C++] Директива #define. В виде макроса определен шаблон функции. #6
Infinity3000, на liveworkspace все работает. Почему шаблоны не использовать?
Infinity3000
1058 / 577 / 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 не должно быть пробелов! вот вся ошибка!))) извините за беспокойство!
Байт
Эксперт C
15840 / 10167 / 1522
Регистрация: 24.12.2010
Сообщений: 19,167
14.12.2011, 11:00     [C++] Директива #define. В виде макроса определен шаблон функции. #8
Цитата Сообщение от Infinity3000 Посмотреть сообщение
Понял свою ошибку)) После Backslash не должно быть пробелов! вот вся ошибка!)))
Здорово! А как ты это увидал? Ведь так просто глазом не увидишь.
И как я был прав 100 лет назад, когда в самопальном редакторе при записи обрубал конечные пробелы! Идея была проста, "если чего не видно - того и нет" Так же я поступил и с табуляцией, только наоборот.
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
14.12.2011, 13:03  [ТС]     [C++] Директива #define. В виде макроса определен шаблон функции. #9
Цитата Сообщение от Байт Посмотреть сообщение
Здорово! А как ты это увидал? Ведь так просто глазом не увидишь.
Чисто случайно) Просто хотел за коментить код поставил пробел, полезли ошибки, убрал пробел, все четко работает!!!

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

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

Не по теме:

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


И еще вопрос - на каком трансляторе эта бяка обнаружилась?
Bers
Заблокирован
14.12.2011, 14:26     [C++] Директива #define. В виде макроса определен шаблон функции. #11
Байт, это от транслятора не зависит. Это правила работы с деррективами. Я сам офигел.
Действительно \ распространялась только на пробелы за ней, но не на то что после.
Байт
Эксперт C
15840 / 10167 / 1522
Регистрация: 24.12.2010
Сообщений: 19,167
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++ Используя перегруженные функции и шаблон функции удалить из массива элемент по индексу
шаблон функции. Задачей функции является округление вышеуказанного вещественного числа с заданной точностью C++
C++ Разработать шаблон класса для работы со стеком реализованным в виде связного списка
Вычислить m значений функции f(x) на отрезке [a, b]. Вычисление величины f(x) оформить в виде функции C++

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

Или воспользуйтесь поиском по форуму:
Infinity3000
1058 / 577 / 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. В виде макроса определен шаблон функции.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru