首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Debug只针对一个使用相同源文件的项目发布,而不进行构建?

为什么Debug只针对一个使用相同源文件的项目发布,而不进行构建?
EN

Stack Overflow用户
提问于 2017-07-12 06:49:23
回答 1查看 40关注 0票数 2

Xilinx SDK的C++编译器在为Zynq SoC ( ARM内核)编译代码时,会抱怨有一个未初始化的变量,但只在发布版本中,而且只针对一个项目。Debug很好,而Debug和Release构建对于链接到同一源文件newthing.cpp的另一个项目也很好。我看不到依赖于项目的#ifdefs。据我所知,所有的构建设置都是相同的,当然调试信息和优化在Release和Debug之间是不同的,但在项目之间没有不同。我们中的一个人怀疑Xilinx工具中存在bug,但除了IDE中的makefile或Build Settings等明显位置之外,可能还有一些细微的差异。

问题在于这样的代码(在newthing.cpp中):

代码语言:javascript
运行
复制
Result R;
GetSomeResult(7, R);
PushData(R.blip);     <== compiler whines: using uninitialized var

其中newthing.h标头定义

代码语言:javascript
运行
复制
struct Result
{
    int blip;
    int bloop;
};

在newthing.cpp中的其他地方定义的结果结构是这样填充的:

代码语言:javascript
运行
复制
int GetSomeResult(int n, Result &res)
{
   res.blip = n + 100;
   res.bloop = 50;
   return n;
}

请注意,我忽略了来自GetSomeResult的返回值,但我怀疑这是否相关。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-12 07:06:23

这是假阴性。

如果可以,只需在将结构传递给GetSomeResult之前将其初始化为零即可

代码语言:javascript
运行
复制
Result R = {};
GetSomeResult(7, R);
PushData(R.blip);

如果这是不可行的(在极少数情况下可能太慢/浪费),您将不得不使用您的构建系统或#pragma来关闭此转换单元的警告/错误。

如果可能,您可能还希望尝试使用较新版本的编译器。

当然,如果您放弃了类似C的方法,转而编写以下代码,那么您的代码将更加惯用,并且不容易出现此问题:

代码语言:javascript
运行
复制
Result GetSomeResult(const int n)
{
   Result res;
   res.blip = n + 100;
   res.bloop = 50;
   return res;
}

// const Result R = GetSomeResult(7);
// PushData(R.blip);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45045680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档