[英]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.