2016-08-09 34 views
1

我有後續的測試代碼test.c如何在使用時忽略錯誤 - 錯誤?

#include<stdio.h> 
int *func() 
{ 
    int i = 123; 
    return &i; 
} 

int main() 
{ 
    printf("%d\n", *func()); 
} 

如果我用命令編譯這是確定的:

gcc test.c -o test 

這將有後續的警告信息:

warning: address of stack memory associated with local variable 'i' 
    returned [-Wreturn-stack-address] 
return &i; 
     ^
1 warning generated. 

但它可以輸出結果:123

如果我使用命令:

gcc -Werror test.c -o test 

這將有如下錯誤信息:

error: address of stack memory associated with local variable 'i' 
    returned [-Werror,-Wreturn-stack-address] 
return &i; 
     ^
1 error generated. 

現在我想用-Werror選項,但我也想忽略address of stack memory associated with local variable 'i'警告,我應該怎麼做?

+0

你意識到返回一個指向堆棧變量的指針是一個糟糕的主意,對吧?如果你完成任何函數調用(包括隱式函數調用,有時在你用'= {0}初始化一個struct/array時執行),指針引用的值將不再有效。這是一個原因的警告。 – ShadowRanger

+0

謝謝@ ShadowRanger我明白了,我只想暫時解決它。 – thinkerou

回答

1

大多數gcc警告可以通過在no-前加上警告名稱來禁用。 -Wno-return-stack-address

這就是說,這不是你想要忽略的東西;返回指向堆棧變量的指針是未定義的行爲,雖然它在大多數編譯器上具有半可預測的結果,但它非常脆弱;任何隱含或顯式的函數調用都可能踩死指針所引用的值。