Перезаписать имя статической функции с помощью макросов - PullRequest
0 голосов
/ 27 сентября 2018

Я хотел бы сделать измерения во время выполнения без изменения моего исходного кода (на самом деле он не мой), код выглядит следующим образом:

Code.c:

#define CODE_SOURCE
#include "GlobalInclude.h"
#include "Code.h"

unsigned int Add(unsigned int x, unsigned int y)
{
  while(x--)
  {
    y++;
  }
  return y;
}

Код.h:

#ifndef CODE_H
#define CODE_H

unsigned int Add(unsigned int x, unsigned int y);

#endif

Main.c:

#include "GlobalInclude.h"
#include "Code.h"


int main()
{
  printf("5+6 = %d", Add(5,6));

  return 0;
}

GlobalInclude.h

#ifndef GLOBALINCLUDE_H
#define GLOBALINCLUDE_H

#if defined CODE_SOURCE
#define Add(x,y) Add_Custom(x,y)
#endif

#endif

Таким образом, я перезаписываю метод Add с помощью своего собственного метода Add_Custom и могусделать некоторые измерения во время выполнения, например:

#define STUB_SOURCE
#include "GlobalInclude.h"
#include "Code.h"
#define DO_SOMETHING() 


unsigned int Add_Custom(unsigned int x, unsigned int y)
{
  unsigned int result;
  DO_SOMETHING();
  result = Add(x,y);
  DO_SOMETHING();
  return result;  
}

Мой вопрос сейчас, возможно ли как-то с методами, которые объявлены и определены в файле c (Code.c)?Я не нашел возможного решения для этого.

1 Ответ

0 голосов
/ 27 сентября 2018

В случае внутренней / статической связи, вы можете написать только «фиктивную» функцию функции, существующей внутри той же единицы перевода.Поэтому вам нужно либо изменить файл .c, либо один из заголовков, включенных в этот файл.

Наименее разрушительным может быть создание «mock.h», который вы включаете из файла C, а затем добавляете макрос, подобный указанному в вашем вопросе.

Если файл .cи все включенные заголовки должны рассматриваться как доступные только для чтения, тогда нет, это невозможно.

...