2016-05-18 13 views
2

有誰知道是否有任何C編譯器可以阻止特定庫和函數的使用?是否有任何C編譯器可以阻止特定庫和函數的使用?

例如,假設我想阻止對float.h的訪問,並試圖編譯一個具有「#include」的程序。我希望編譯失敗和某種消息表明它是因爲不能包含float.h。或者,如果我想在math.h中阻止對sqrt()和pow()的訪問,但包含該庫中的所有其他函數,那麼一個程序的行「double hold = pow(2.0, 3.0);」不會編譯,並會穿着被阻止的函數被調用。

我試過在網上搜索這樣的東西,但我不認爲我知道正確的術語來搜索,因爲我似乎無法找到任何有關我實際上正在尋找的結果。

+0

這種功能的用途是什麼?你總是可以重新定義被阻塞的函數/類型。 –

+2

如果您使用的是GCC,['#pragma GCC poison'](https://gcc.gnu.org/onlinedocs/gcc-3.3/cpp/Pragmas.html)可以用於阻止特定功能。它不會幫助整個標題。 – Quentin

+2

我正在嘗試編寫一門教C語言的程序。他們輸入代碼,將代碼傳遞給編譯器並運行它,將輸出傳輸到一個文件,然後由我的程序讀取。我想確保他們不能通過阻止訪問一些更危險的功能,並確保他們不能將輸出重定向到比我想要的更多的地方。 – PolkaPunk

回答

4

如與海灣合作委員會,你可以做以下,以防止某些包括:

  1. 創建每個頭一個失敗的存根包括要失敗:

float.h時:

#error "You must not include me" 
  • 確保那些存根將奧雅納rride您的系統庫:

    $ export CPATH=$PWD 
    
  • 編譯C文件,試圖包含在這種環境下會失敗,"float.h"<float.h>

    當然,這是可以避免的。你所需要的只是手動聲明缺失頭文件中聲明的函數。

    更好的選擇可能是創建一個全局包含(-include),其中所有符號不應該在程序中的任何位置使用。

    您還可以檢查帶有nm的crated對象文件,查找不想由c librard解析的未解析符號,如果找到這些符號,則停止構建。

    +0

    '編譯GCC毒'正是我正在尋找的!謝謝PSkocik! – PolkaPunk

    相關問題