LINUX.ORG.RU

История изменений

Исправление samson, (текущая версия) :

Спасибо. Вот так работает.

/* $ g++ -DVARIANT=small test.cpp */
#define _expand_str(a) #a
#define _config(a) _expand_str(test_##a.h)
#define config(a) _config(a)

#define _call_main(a) main_##a
#define call_main(a)  _call_main(a) 

#include config(VARIANT)

#include <iostream>
using namespace std;

void main_small() { cout << "small"; }
void main_large() { cout << "large"; }

int main() {
  call_main(VARIANT)(); /* сначала пытался последние скобки в макрос запихнуть - не вышло */
  cout << endl;
  return 0;
}

Я не уверен, что '#' или '##' подстановки работают вне определения макроса

не работают. Какраз в это сначала и уперся.

Лучше решить проблему на уровне линковки или в крайнем случае плагинами

Это надо для AVR. Поэтому плагины отпадают. А на уровне линковки как сделать в Eclipse (пока собирается все в IDE) не знаю.

Исправление samson, :

Спасибо. Вот так работает.

/* $ g++ -DVARIANT=small test.cpp */
#define _expand_str(a) #a
#define _config(a) _expand_str(test_##a.h)
#define config(a) _config(a)

#define _call_main(a) main_##a
#define call_main(a)  _call_main(a) 

#include config(VARIANT)

#include <iostream>
using namespace std;

void main_small() { cout << "small"; }
void main_large() { cout << "large"; }

int main() {
  call_main(VARIANT)();
  cout << endl;
  return 0;
}

Я не уверен, что '#' или '##' подстановки работают вне определения макроса

не работают. Какраз в это сначала и уперся.

Лучше решить проблему на уровне линковки или в крайнем случае плагинами

Это надо для AVR. Поэтому плагины отпадают. А на уровне линковки как сделать в Eclipse (пока собирается все в IDE) не знаю.

Исходная версия samson, :

Спасибо. Вот так работает.

/* $ g++ -DVARIANT=small test.cpp */
#define _expand_str(a) #a
#define _config(a) _expand_str(test_##a.h)
#define config(a) _config(a)

#define _call_main(a) main_##a
#define call_main(a)  _call_main(a) 

#include config(VARIANT)

#include <iostream>
using namespace std;

void main_small() { cout << "small"; }
void main_large() { cout << "large"; }

int main() {
  call_main(VARIANT)();
  cout << endl;
  return 0;
}

Я не уверен, что '#' или '##' подстановки работают вне определения макроса

не работают. Какраз в это сначала и уперся.

Лучше решить проблему на уровне линковки или в крайнем случае плагинами

Это надо для AVR. Поэтому плагины отпадают. А на уровне линковки как сделать в Eclipse не знаю.