compiler-errors - 在移植到 ARM 期间使用指针访问数组不起作用

标签 compiler-errors compiler-optimization

我是 ARM 平台的新手。

下面的代码已在一个函数中使用,用于找出一些复数样本的共轭乘法并将其滑动到一些样本。

此代码在 linux 12.04 版本的 native 编译器中正常工作。在 ARM 中运行相同的代码时,它不会执行该功能。它只是从正在运行的代码中退出。

#include<stdio.h>

int main()
{
    float aa[12]={1,1,1,1,1,1,1,1,1,1,1,1};
    float *x=aa,*y=x+6,real=0,imag=0;

    fn_ComplexMultiply_addthem(x,y,6,&real,&imag);

    printf("real value = %f\n",real);
    printf("real value = %f\n",imag);
}

void fn_ComplexMultiply_addthem(float *x, float *y, float len, float *re, float *im)
{
    int j;

    for( j=0; j<len; j+=2)
    {
        *re += (x[j]*(y[j]));
        *re -= (x[j+1]*(-y[j+1]));
        *im += (x[j]*(-y[j+1]));
        *im += (x[j+1]*(y[j]));
    }
}

我无法理解它的原因。每个指针都指向某个值,然后它应该给我任何可能正确的结果。相反,它只是从模拟中退出。

它会与其他一些东西(如堆栈或其他内存)有问题吗?
请帮我调试这个。

最佳答案

程序无效,因为 fn_ComplexMultiply_addthem在声明之前使用,并且隐式声明与实际定义不匹配。

此外,float len没有意义。我们不使用浮点数进行计数。

更改lenint并在 main 之前添加函数声明:

void fn_ComplexMultiply_addthem(float *x, float *y, int len, float *re, float *im);

总是 启用编译器警告并将它们视为错误(-Wall -Werror 用于 gcc 和 clang)。

关于compiler-errors - 在移植到 ARM 期间使用指针访问数组不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46194284/

相关文章:

c - IOCCC 1987/weSTLey.c - GCC 的左值问题

c - 合并重复文字时,C 编译器会在字符串中间查找吗?

java - 默认变量值与默认初始化

c++ - 通过 C++ 中的构造函数将地址参数传递给基类指针

java - 使用梯形近似求曲线下面积的程序中存在逻辑错误

c - 错误 "' strcpy' 使指针来自整数而不进行强制转换”

compiler-construction - Web Essentials LESS Compiler 不提供错误消息

c++ - pIter != cont.end() 在 for 循环中的表现

c++ - 运算符链接,为什么要增长左分支?

c - icc -fast 标志的错误结果