2016-09-13 63 views
3

我試圖嘲弄一個FN,有沒有辦法做到這一點@運行時,而不是編譯時?出於歷史原因,我無法使用C++。弱別名說foo的使用</p> <pre><code>#ifdef UT_TEST void foo(void) __attribute__ ((weak, alias ("foo_impl"))); #else void foo(void); #endif </code></pre> <p>但是嘲笑

+0

爲什麼在運行時需要這樣做? –

+0

您是否嘗試過預加載提供'foo()'模擬的共享庫? –

+0

@Ben運行時的原因,可以說我模擬malloc()。然後我用malloc()調用foo來模擬。之後我想用正常的malloc()調用bar(),我該如何改變行爲? – kgunjikar

回答

1

在過去,我主要在構建系統級別上看到這個問題,而我認爲這是一個更乾淨的解決方案。這樣做可以避免大多數ifdefs,而是使用完整文件。在化妝,它可能是這個樣子:

OBJS += file1.o file2.o 
ifeq ($(UNIT_TEST),y) 
OBJS += dummy_implementation.o 
else 
OBJS += real_implementation.o 
endif 

myprog: $(OBJS) 

或比較經典的化妝成語:

OBJS-y += file1.o file2.o 
OBJS-$(UNIT_TEST) += dummy_implementation.o 
OBJS-$(REAL_BUILD) += real_implementation.o 
OBJS = $(OBJS-y) 

myprog: $(OBJS) 

dummy_implementation.c和real_implementation.c會在這種情況下,共享的頭文件。

相關問題