繁体   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