История изменений
Исправление 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 не знаю.