簡體   English   中英

使用宏覆蓋靜態函數名稱

[英]Overwrite static function name using macros

我想在不修改原始代碼的情況下進行運行時測量(實際上不是我的代碼),代碼如下所示:

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;
}

Code.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_Custom方法覆蓋了Add方法,並且可以執行一些運行時測量,例如:

#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)中聲明和定義的方法在某種程度上可行嗎? 我沒有找到任何可能的解決方案。

如果是內部鏈接/靜態,則只能編寫同一翻譯單元內存在的“模擬”功能。 因此,您必須修改.c文件或該文件包含的標頭之一。

破壞力最小的可能是創建一個“ mock.h”,將其從C文件中包含進來,然后在其中添加一個與您的問題類似的宏。

如果.c文件和所有包含的頭文件都被視為只讀,則否,這是不可能的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM