我正在嘗試編譯一個大型專案(https://github.com/ESCOMP/CTSM)。如果可能的話,我想按原樣編譯它,而不編輯代碼(眾所周知,它可以在許多平臺上成功構建)。
我正在使用gcc (SUSE Linux) 11.2.1. 我得到
在函式 ncmp 中:/run/media/dominic/hdbtrfs/dominic/git/ESCOMP/CTSM/cime/src/share/timing/gptl.c:4069:1:錯誤:控制到達非無效函式的結尾 [-Werror =回傳型別]
從以下功能。我相信早期版本的 gcc 在這種情況下只會給出警告而不是錯誤。
/*
** ncmp: compares values of memory adresses pointed to by a pointer. for use with qsort
*/
static int ncmp( const void *pa, const void *pb )
{
static const char *thisfunc = "GPTLsetoption";
const char** x = (const char**)pa;
const char** y = (const char**)pb;
if( *x > *y )
return 1;
if( *x < *y )
return -1;
if( *x == *y )
GPTLerror("%s: shared memory address between timers\n", thisfunc);
}
我希望可以通過return在函式末尾插入虛假陳述句來解決此問題,但由于我有興趣嘗試構建未修改的代碼版本(我目前不是該專案的貢獻者,因此無法推送上游更改)我想知道是否有一種解決方法可以使用編譯器標志將此錯誤轉換為警告?
這里要求的是由 makefile 生成的 gcc 呼叫:
mpicc -c -I/run/media/dominic/hdbtrfs/dominic/git/ESCOMP
/CTSM/cime/src/share/timing -std=gnu99 -O -DCESMCOUPLED
-DFORTRANUNDERSCORE -DNO_R16 -DCPRGNU -DCESMCOUPLED
-DFORTRANUNDERSCORE -DNO_R16 -DCPRGNU -DNUOPC_INTERFACE
-DHAVE_MPI /run/media/dominic/hdbtrfs/dominic/git/ESCOMP
/CTSM/cime/src/share/timing/gptl.c
uj5u.com熱心網友回復:
我想知道是否有一種解決方法可以使用編譯器標志將此錯誤轉換為警告?
我希望該-Wno-error選項會產生這種效果。還應該可以將其范圍縮小到您報告的特定診斷,但請注意:僅使用命令列選項無法將影響范圍縮小到此特定問題實體。
附錄
該問題已被編輯以顯示診斷類別為return-type,我可以說人們將使用-Wno-error=return-type此型別的所有診斷來警告而不是錯誤。
uj5u.com熱心網友回復:
-Werror將所有警告提升為錯誤。您可以使用 反轉此特定警告,例如GCC 檔案中明確記錄的警告選項:-Wno-error=WarningName-Wno-error=return-type
此開關 [
-Werror=] 采用否定形式,用于否定-Werror特定警告;例如-Wno-error=switch,使-Wswitch警告不是錯誤,即使-Werror在有效時也是如此。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/442969.html
