[英]Optimization flag removing undefined reference to extern variable
考慮以下代碼:
extern int var;
void foo(int & param)
{
(void) param;
}
int main(void)
{
foo(*(&var));
return 0;
}
以這種方式編譯:
$ g++ -Os -o test.o -c test.cpp
$ g++ test.o
但是當我刪除-Os
標志時,存在對var
的未定義引用。
-Os
啟用了什么樣的優化來跳過這個未定義的引用? (根據GCC 文檔,我嘗試用它啟用的所有優化來替換該標志,但沒有-Os
我無法重現。
另一個問題,當我在一個 go 中編譯示例時:
$ g++ -c test.c
即使沒有優化標志也沒有錯誤,為什么?
在對標志執行一些二進制搜索后,相關的標志似乎是-fipa-pure-const
,在此處演示。 描述是“發現哪些函數是純函數或常量函數。默認情況下在 -O1 及更高級別啟用。”,這大概包括注意到foo
實際上並沒有對param
做任何事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.