Директива Предварительной Обработки C++


Допустим, у меня есть следующий код

int i;
int j;
string s;
string t;
Есть ли препроцессоры, которые могут преобразовать его в нечто подобное?
int i;
int j;
string s;
string t;
void print() {
    cout << i;
    cout << j;
    cout << s;
    cout << t;
}
Что-то, что выглядело бы так, было бы здорово.
#section print
int i;
int j;
string s;
string t;
#endsection

С приведенным выше кодом мне пришлось бы написать другой препроцессор, который обрабатывает его, но я не знаю, как.

2 2

2 ответа:

- Нет.

Препроцессор-директивы определяются в препроцессоре, и вы не можете добавлять новые.

Но вы можете легко написать какой-нибудь скрипт, который внес бы такие изменения. (Per / Python / Ruby, что угодно)

Единственным минусом будет необходимость вручную запускать этот скрипт перед каждой компиляцией.

Это вряд ли то, что я назвал бы "отличным стилем", но метод, который я использую в крайнем случае, особенно в ограниченных системах, называется XMacro

В принципе, сделайте файл с расширением .xmacro (я буду использовать MyXMacro.xmacro), а затем заполните его такими данными:

XMACRO_INT(i)
XMACRO_INT(j)
XMACRO_STRING(s)
XMACRO_STRING(t)
#undef XMACRO_INT
#undef XMACRO_STRING

Затем в коде вы пишете что-то вроде этого:

#define XMACRO_INT(x) int x ;
#define XMACRO_STRING(x) std::string x ;
#include "MyXMacro.xmacro"

void print() {
# define XMACRO_INT(x) std::cout << x ;
# define XMACRO_STRING(x) std::cout << x ;
# include "MyXMacro.xmacro"
}
В какой-то момент, однако, написание сценария и включение его в вашу сборку-лучший выбор.