簡體   English   中英

c / c ++編譯時“兼容性”檢查

[英]c / c++ compile-time “compatibility” check

首先,我認識到這是不可能的,因為宏僅擴展了一次。 但是,我希望有一些獲得類似行為的標准方法,或者對其他方法的建議。

我正在尋找一種對我們的構建進行編譯時檢查的方法,這種檢查在不兼容的情況下會引發錯誤。 當然,以下方法是行不通的,但是在我看來,這是最容易理解的方法:

version.h:

#define CODE_VERSION 2
#define VERSION(x)    #if (CODE_VERSION > (x) ) \
                          #error "Incompatible version detected!" \
                      #endif

main.c:

#include "version.h"
VERSION(1)
// ...and so on

如果將預處理器的輸出反饋預處理器,則應該導致在編譯期間出現錯誤。

那么,實現此(或類似)行為的正確方法是什么? 出於好奇,其背后的想法是避免在審核相當大的代碼庫以遵循審核過程時進行人工分析(因為自動審核的負擔要小得多)。

提高靜態斷言? 由於已將其標記為C和C ++,因此boost可能不是一種選擇,但請參考: BOOST_STATIC_ASSERT,而無需boost

C語言可用的解決方案是在main.c文件中定義需要的版本,然后再添加version.h:

  • main.c:

     #define NEEDED_VERSION 1 #include "version.h" 
  • version.h:

     #define CODE_VERSION 2 #ifndef NEEDED_VERSION #error please declare what version you need #elif NEEDED_VERSION > CODE_VERSION #error #endif 

Jon Jagger的“ C中的編譯時斷言”中描述了一種不使用任何C ++ 0x功能就進行編譯時斷言的方法 C編程Wikibook的一節專門介紹了編譯時斷言

你最終會得到類似

main.c:

#include "version.h"
#include <static_assert.h>

static_assert( (CODE_VERSION <= 1), "Incompatible version detected!" )

ps:我幾乎可以肯定,“使用測試驅動的開發(TDD)和良好的版本控制系統”是避免意外包含舊版本源代碼的更好方法。

暫無
暫無

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

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