Я должен сделать ужасную вещь , то есть автоматически заменить вызов функции другим вызовом функции с другим количеством параметров во время предварительной компиляции.Пример:
#include <iostream>
int FuncToChange(void* a, int b, void* c, int d) {
return 0;
}
int NewFunc(void* a, void* c, int d) {
return 1;
}
#define FuncToChange($1, $2, $3, $4) NewFunc($1, $3, $4)
int main()
{
int a = 1, b = 2, c = 256;
int v = FuncToChange(&a + 1, c + 1, &b, 2*c);
}
Этот код работает, т. Е. В main()
NewFunc()
вызывается вместо FuncToChange()
.
Теперь я хотел бы удалить этот #define (причина в том, что Я не могу изменить код ) и получить тот же результат, задавая параметры сборки IDE.
IDE: CodeBlocks 10.05.
Я уже пытался добавить то, что следует, в Project / Параметры сборки проекта / Параметры компилятора / #define:
NewFunc($1, $3, $4)=FuncToChange($1, $2, $3, $4)
, но ничего не изменилось.У кого-нибудь есть идеи?
Заранее спасибо!
Pietro
Платформа :
GCC / MinGW
64-битная Windows7
Причина этого вопроса:
Мне нужно портировать плагин Excel с XP 32-битной на Windows 7 64-битной.Плагин был разработан с CodeBlocks, и я не могу изменить набор инструментов.Файл FRAMEWRK.C (часть «Ресурсы для разработчиков систем Office 2010», Excel2010 XLL SDK) эволюционировал и теперь использует вызовы нестандартных функций, таких как memcpy_s()
, недоступных в MinGW.Итак, с препроцессором я заменяю memcpy_s()
на memcpy()
, заботясь о различных параметрах.