是否有一個verify()函數(如msvc中的VERIFY())或類似的標準c庫中,還是我必須編寫自己的?如果是這樣,哪個頭在下?c標準庫中是否有驗證函數?
編輯:斷言和驗證的是,確認將在發佈版本仍然執行的功能,而在斷言語句不釋放編譯之間的差異。
I.e.
assert(printf(「assert」));
verify(printf(「verify」));
在調試時將打印「斷言驗證」,但在發佈時將打印「驗證」。
是否有一個verify()函數(如msvc中的VERIFY())或類似的標準c庫中,還是我必須編寫自己的?如果是這樣,哪個頭在下?c標準庫中是否有驗證函數?
編輯:斷言和驗證的是,確認將在發佈版本仍然執行的功能,而在斷言語句不釋放編譯之間的差異。
I.e.
assert(printf(「assert」));
verify(printf(「verify」));
在調試時將打印「斷言驗證」,但在發佈時將打印「驗證」。
定義的斷言宏在運行時,C在assert.h
的assert
宏。
在編譯時,C(因爲C11)在assert.h
中有static_assert
宏。
有關信息,對於static_assert
,某些C89/C99編譯器也將其作爲編譯器擴展包含在內。例如,IAR編譯器intrinsics.h
中有static_assert
函數。
澄清我的問題,我不是在尋找assert – ashleysmithgpu
@yuumei,而是'assert'像MS文檔中的'verify'一樣工作。只有當'NDEBUG'宏沒有被定義時,C'assert'纔會執行它的工作。 – ouah
您可以使用CUnit進行單元測試。它是用於Java的舊的JUnit庫的C端口。
後來編輯:它似乎有一個類似的宏,我不知道。
你可以使用ASSERT.H
爲什麼不直接使用'assert'? –
完全取決於您是否在發佈版本中啓用了斷言 - 這是由'NDEBUG'宏控制的。 –
我明白了,答案是否定的,它只是一個微軟的東西。 – ashleysmithgpu