簡體   English   中英

優化標志刪除對外部變量的未定義引用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM