0
我試圖想出一種防止函數被內聯的可移植方法。我在這個old answer中找到了我的解決方案,其中有一條評論「它可能並不總是有效」。防止函數內聯可移植
void (*foo_ptr)() = foo;
foo_ptr();
我的功能就是增加一個臨時的,目的是控制用於驗證的PC(行使一些微量的硬件),我不關心周圍的代碼 - 只是流可能會保持工作當我在10年的時間裏回到這個時候(用新的工具鏈)。我寧願不使用屬性或嵌入式彙編器(我已經需要支持3個工具鏈,並且我有一些出現現在可以工作)。
我在想,通過volatile傳遞地址會給我更多的保護。這是必要的,還是有什麼不太醜我可以使用?
嘗試是「便攜式」和「目的是控制PC進行驗證」似乎自相矛盾。我不知道有一種便攜式方式來檢查電腦;這將始終取決於某個工具鏈。幾乎所有的工具鏈都有防止內聯的方法(例如'__attribute __((__ noinline __))'或者gcc)。 – ensc
我有硬件監控PC - 我需要鍛鍊硬件(不測試它)。 –
將它放在一個單獨的文件(編譯單元)中,將其編譯爲對象(或庫),並將生成的對象鏈接到「主」程序。 – wildplasser