Многострочные макросы в с ++ - PullRequest
0 голосов
/ 17 марта 2019

Я пытался написать макросы для кода ниже, но слово «Тест» подчеркнуто красным, и я не знаю, верны ли объявленные мной макросы. Код:

ABC Test{
int x,y,z;
AAA:
Test() : INIT(x),INIT(y),INIT(z) { }
CREATE(x);
CREATE(y);
CREATE(z);
};

В этом слове ABC должен быть эквивалентен «класс», а AAA - «публичный». Макросы, которые я написал:

#define ABC class name\
int _DATE_
#define AAA public
#define INIT(number)\
{int number = _COUNTER_}
#define ZERO  0
#define CREATE(number) number = ZERO;

1 Ответ

1 голос
/ 17 марта 2019

если m.cc =

#define ABC class name\
int _DATE_
#define AAA public
#define INIT(number)\
{int number = _COUNTER_}
#define ZERO  0
#define CREATE(number) number = ZERO;

ABC Test{
int x,y,z;
AAA:
Test() : INIT(x),INIT(y),INIT(z) { }
CREATE(x);
CREATE(y);
CREATE(z);
};

, то (конечно, можно также использовать gcc ):

pi@raspberrypi:/tmp $ g++ -E m.cc
# 1 "m.cc"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "m.cc"
# 9 "m.cc"
class nameint _DATE_ Test{
int x,y,z;
public:
Test() : {int x = _COUNTER_},{int y = _COUNTER_},{int z = _COUNTER_} { }
x = 0;;
y = 0;;
z = 0;;
};

с таким отступом:

class nameint _DATE_ Test{
    int x,y,z;
  public:
    Test() : {int x = _COUNTER_},{int y = _COUNTER_},{int z = _COUNTER_} { }
    x = 0;;
    y = 0;;
    z = 0;;
 };

вероятно, не ожидаемый результат; -)


Возможно, вы хотели что-то вроде:

#define ABC(name) class name {int _DATE_;
#define AAA public
#define INIT(number)  number(_COUNTER_)
#define ZERO  0
#define CREATE(number) int number = ZERO;

ABC (Test)
CREATE(x)
CREATE(y)
CREATE(z)
AAA:
Test(int _COUNTER_) : INIT(x),INIT(y),INIT(z) { }
};

затем:

pi@raspberrypi:/tmp $ g++ -E  m.cc
# 1 "m.cc"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "m.cc"

class Test {int _DATE_;
int x = 0;
int y = 0;
int z = 0;
public:
Test(int _COUNTER_) : x(_COUNTER_),y(_COUNTER_),z(_COUNTER_) { }
};

с таким отступом:

class Test {
    int _DATE_;
    int x = 0;
    int y = 0;
    int z = 0;
  public:
    Test(int _COUNTER_) : x(_COUNTER_),y(_COUNTER_),z(_COUNTER_) { }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...