Q_ASSERT(value_which_is_always_smaller_than_4 < 4)
其中Q_ASSERT是QTS斷言宏一些代碼。現在鐺,當看到這個警告我時,因爲比較總是如此。不錯,它可以檢測到這一點,但這是assert語句的要點。我可以以某種方式壓制警告,但只能在斷言陳述?我仍然希望在其他地方受到警告。
Q_ASSERT(value_which_is_always_smaller_than_4 < 4)
其中Q_ASSERT是QTS斷言宏一些代碼。現在鐺,當看到這個警告我時,因爲比較總是如此。不錯,它可以檢測到這一點,但這是assert語句的要點。我可以以某種方式壓制警告,但只能在斷言陳述?我仍然希望在其他地方受到警告。
可以定義一個新的宏包Q_ASSERT
並自動沉默警告使用#pragma clang diagnostic ignored
:
#define STR(x) #x
#define PRAGMA(x) _Pragma(STR(x))
#define MY_ASSERT(x) PRAGMA(clang diagnostic push) \
PRAGMA(clang diagnostic ignored "-Wtautological-compare") \
Q_ASSERT(x) \
PRAGMA(clang diagnostic pop)
現在只是在做
MY_ASSERT(3<4)
不應該產生警告。
您可以通過將-Wno-tautological-compare
添加到Clang命令行(標記如-Wall
打開警告之後)來禁用整個文件。這種方法的缺點是,現在在該翻譯單元中的任何地方都禁用該警告,而不僅僅是對於宏實例。
另外,比較繁瑣,但細粒度的,方法是住宏的每個實例產生與此警告如下:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wtautological-compare"
Q_ASSERT(value_which_is_always_smaller_than_4 < 4)
#pragma clang diagnostic pop
@JoachimPileborg:OP要在其他地方發出警告。 '-Wnotautological-compare'會在任何地方壓制警告。 – Nawaz 2013-04-07 16:07:38
如果clang可以檢測到這一點,則意味着'value_which_is_always_smaller_than_4'是編譯時常量。在這種情況下,可以使用編譯時斷言(如C++中的static_assert)來斷言它們的值,這肯定比運行時斷言更好。 – Shahbaz 2017-06-16 15:17:17