Подставить функцию с препроцессором - PullRequest
0 голосов
/ 18 января 2012

Я должен сделать ужасную вещь , то есть автоматически заменить вызов функции другим вызовом функции с другим количеством параметров во время предварительной компиляции.Пример:

#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(), заботясь о различных параметрах.

1 Ответ

3 голосов
/ 19 января 2012

Хорошо. Я переместил #define в свой собственный файл включения. Затем я указал его в GCC с параметром командной строки -include.
При этом файл включается вверху каждого исходного файла.

...