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

Сцепить строку в макросе - C++

Восстановить пароль Регистрация
 
_Valera_
 Аватар для _Valera_
486 / 368 / 94
Регистрация: 27.01.2015
Сообщений: 1,588
10.07.2015, 22:45     Сцепить строку в макросе #1
C++
1
2
3
4
5
6
7
#define TEST(a) test ## a
 
int main()
{
    for(int i = 1;i<=4; ++i)
        TEST(i);
}
Нужно получить имена test1 ...test4, но выходит testi.
Как быть?


Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2015, 22:45     Сцепить строку в макросе
Посмотрите здесь:

Как в макросе передать параметр в строковый литерал? C++
C++ ввести строку символов. Сформировать строку вдвое большей длины, где каждый символ предворяется пробелом. Вывести полученную строку.
что значит L##x в макросе #define _T(x) L##x? C++
Описать строку А. Из входной последовательности символов записать в строку А только цифры C++
(void) в макросе define C++
Что значит запись в макросе C++
Ошибка в макросе C++
Ввести строку текста и строку поиска, найти местоположение первого вхождения строки поиска в строку текста C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6441 / 3815 / 884
Регистрация: 30.01.2014
Сообщений: 6,610
10.07.2015, 22:58     Сцепить строку в макросе #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от _Valera_ Посмотреть сообщение
Как быть?
Никак, макросы не обрабатывают данные в runtime.
Макросы - это, грубо говоря, поиск+замена в тексте программы. Не более того.

Пиши функцию.
hoggy
5227 / 2118 / 403
Регистрация: 15.11.2014
Сообщений: 4,803
Завершенные тесты: 1
10.07.2015, 23:26     Сцепить строку в макросе #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от _Valera_ Посмотреть сообщение
Нужно получить имена test1 ...test4, но выходит testi.
никак.

если бы вам прсто нужно было просто запилить кучку переменных в исходном тексте программы,
тогда можно было бы сделать например так:


http://rextester.com/UUICMR10918

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#define dFORDIMMY void()
 
#define dFOR(beg, end, macro) \
    dFOR_##beg##_##end(macro) \
    dFORDIMMY
 
// ---------------------------------------------
// ---------------------------------------------
// ---------------------------------------------
 
#define dFOR_0_0(macro) macro(0)
#define dFOR_0_1(macro) dFOR_0_0(macro) macro(1)
#define dFOR_0_2(macro) dFOR_0_1(macro) macro(2)
#define dFOR_0_3(macro) dFOR_0_2(macro) macro(3)
#define dFOR_0_4(macro) dFOR_0_3(macro) macro(4)
#define dFOR_0_5(macro) dFOR_0_4(macro) macro(5)
#define dFOR_0_6(macro) dFOR_0_5(macro) macro(6)
#define dFOR_0_7(macro) dFOR_0_6(macro) macro(7)
#define dFOR_0_8(macro) dFOR_0_7(macro) macro(8)
#define dFOR_0_9(macro) dFOR_0_8(macro) macro(9)
 
#define dFOR_1_1(macro) macro(1)
#define dFOR_1_2(macro) dFOR_1_1(macro) macro(2)
#define dFOR_1_3(macro) dFOR_1_2(macro) macro(3)
#define dFOR_1_4(macro) dFOR_1_3(macro) macro(4)
#define dFOR_1_5(macro) dFOR_1_4(macro) macro(5)
#define dFOR_1_6(macro) dFOR_1_5(macro) macro(6)
#define dFOR_1_7(macro) dFOR_1_6(macro) macro(7)
#define dFOR_1_8(macro) dFOR_1_7(macro) macro(8)
#define dFOR_1_9(macro) dFOR_1_8(macro) macro(9)
 
#define dFOR_2_2(macro) macro(2)
#define dFOR_2_3(macro) dFOR_2_2(macro) macro(3)
#define dFOR_2_4(macro) dFOR_2_3(macro) macro(4)
#define dFOR_2_5(macro) dFOR_2_4(macro) macro(5)
#define dFOR_2_6(macro) dFOR_2_5(macro) macro(6)
#define dFOR_2_7(macro) dFOR_2_6(macro) macro(7)
#define dFOR_2_8(macro) dFOR_2_7(macro) macro(8)
#define dFOR_2_9(macro) dFOR_2_8(macro) macro(9)
 
#define dFOR_3_3(macro) macro(3)
#define dFOR_3_4(macro) dFOR_3_3(macro) macro(4)
#define dFOR_3_5(macro) dFOR_3_4(macro) macro(5)
#define dFOR_3_6(macro) dFOR_3_5(macro) macro(6)
#define dFOR_3_7(macro) dFOR_3_6(macro) macro(7)
#define dFOR_3_8(macro) dFOR_3_7(macro) macro(8)
#define dFOR_3_9(macro) dFOR_3_8(macro) macro(9)
 
#define dFOR_4_4(macro) macro(4)
#define dFOR_4_5(macro) dFOR_4_4(macro) macro(5)
#define dFOR_4_6(macro) dFOR_4_5(macro) macro(6)
#define dFOR_4_7(macro) dFOR_4_6(macro) macro(7)
#define dFOR_4_8(macro) dFOR_4_7(macro) macro(8)
#define dFOR_4_9(macro) dFOR_4_8(macro) macro(9)
 
#define dFOR_5_5(macro) macro(5)
#define dFOR_5_6(macro) dFOR_5_5(macro) macro(6)
#define dFOR_5_7(macro) dFOR_5_6(macro) macro(7)
#define dFOR_5_8(macro) dFOR_5_7(macro) macro(8)
#define dFOR_5_9(macro) dFOR_5_8(macro) macro(9)
 
#define dFOR_6_6(macro) macro(6)
#define dFOR_6_7(macro) dFOR_6_6(macro) macro(7)
#define dFOR_6_8(macro) dFOR_6_7(macro) macro(8)
#define dFOR_6_9(macro) dFOR_6_8(macro) macro(9)
 
#define dFOR_7_7(macro) macro(7)
#define dFOR_7_8(macro) dFOR_7_7(macro) macro(8)
#define dFOR_7_9(macro) dFOR_7_8(macro) macro(9)
 
#define dFOR_8_8(macro) macro(8)
#define dFOR_8_9(macro) dFOR_8_8(macro) macro(9)
 
#define dFOR_9_9(macro) macro(9)
 
 
 
#include <iostream>
 
int main()
{
    std::cout << "Hello, world!\n";
    
    
    //--- цикл на препроцессоре
    #undef iteration
    #define iteration(n) \
        int var_##n = n;
  
    dFOR(5, 7, iteration);
    std::cout<<"--------------\n";
    
    std::cout << "var_5 = " << var_5 <<'\n';
    std::cout << "var_6 = " << var_6 <<'\n';
    std::cout << "var_7 = " << var_7 <<'\n';
}
Yandex
Объявления
10.07.2015, 23:26     Сцепить строку в макросе
Ответ Создать тему
Опции темы

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