Xilinx SDK的C++编译器在为Zynq SoC ( ARM内核)编译代码时,会抱怨有一个未初始化的变量,但只在发布版本中,而且只针对一个项目。Debug很好,而Debug和Release构建对于链接到同一源文件newthing.cpp的另一个项目也很好。我看不到依赖于项目的#ifdefs。据我所知,所有的构建设置都是相同的,当然调试信息和优化在Release和Debug之间是不同的,但在项目之间没有不同。我们中的一个人怀疑Xilinx工具中存在bug,但除了IDE中的makefile或Build Settings等明显位置之外,可能还有一些细微的差异。
问题在于这样的代码(在newthing.cpp中):
Result R;
GetSomeResult(7, R);
PushData(R.blip); <== compiler whines: using uninitialized var其中newthing.h标头定义
struct Result
{
int blip;
int bloop;
};在newthing.cpp中的其他地方定义的结果结构是这样填充的:
int GetSomeResult(int n, Result &res)
{
res.blip = n + 100;
res.bloop = 50;
return n;
}请注意,我忽略了来自GetSomeResult的返回值,但我怀疑这是否相关。
发布于 2017-07-12 07:06:23
这是假阴性。
如果可以,只需在将结构传递给GetSomeResult之前将其初始化为零即可
Result R = {};
GetSomeResult(7, R);
PushData(R.blip);如果这是不可行的(在极少数情况下可能太慢/浪费),您将不得不使用您的构建系统或#pragma来关闭此转换单元的警告/错误。
如果可能,您可能还希望尝试使用较新版本的编译器。
当然,如果您放弃了类似C的方法,转而编写以下代码,那么您的代码将更加惯用,并且不容易出现此问题:
Result GetSomeResult(const int n)
{
Result res;
res.blip = n + 100;
res.bloop = 50;
return res;
}
// const Result R = GetSomeResult(7);
// PushData(R.blip);https://stackoverflow.com/questions/45045680
复制相似问题