[英]How can I avoid the “dynamic initialization in unreachable code” warning?
我正在編寫類似於以下內容的模板化函數* :
template <typename T, bool v>
void foo(T t1) {
/* common code */
if (v) {
int i = bar();
/* ... */
return;
}
else {
/* ... */
}
/* more common code */
}
當我對此進行編譯並且foo
實例化且v
設置為false時,編譯器會說:
warning: dynamic initialization in unreachable code
現在,由於template參數,代碼無法訪問; 這應該是完全可以接受的。 如何避免或禁止此警告? 我寧願不完全壓制這種警告。
筆記:
對於當前的構造,沒有一種真正已知的簡單修復方法(我也遇到了同樣的問題,NVCC也是如此)。 但是,您可以將v=true
的模板專門化,僅將代碼插入if(v)
-statement內。
這絕不是最佳解決方案,因為它可能導致代碼重復,但可以解決警告。
如果您使用GCC作為主機編譯器,並且錯誤出在主機代碼中,那么您也可以嘗試像這樣抑制警告:
#pragma GCC diagnostic ignored "-Wunreachable-code"
編輯:只是注意到這可能是錯誤的警告代碼,因為它通常是關於無效代碼的。 完整的警告列表可在以下位置找到: http : //gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
這個問題可能也很有趣: 如何使用nvcc禁用編譯器警告
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.