运行时数组大小 - Xcode

时间:2012-02-18 08:46:55

标签: c xcode gcc llvm

我在Xcode中有以下代码。我正在为嵌入式应用程序开发此代码,所以我尽量避免使用malloc。

void checkForFaults(char seqToCheck[], int bytesInSequence, int bitsSet)
{
    int i;
    int count = 0;
    unsigned int faultPositions[bitsSet];
    int position = 0;
    int pos = 0;
    int j;
    int a;
    for(i=bytesInSequence-1;i>=0;i--)
    {
         unsigned char faultsAt[countBitsSet(seqToCheck[i])];
         detectFaults(seqToCheck[i], faultsAt, 0);
         count = countBitsSet(seqToCheck[i]);
         j=0;
         while(j<count)
         {
              a = position*8 + faultsAt[j];
              faultPositions[pos] = a;
              printf("%d ",faultPositions[pos]);
              pos++;
              j++;
         }
    position++;
    }
    printf("Faults At: ");
    for(i=0;i<bitsSet;i++)
    {
        printf("%d\n",faultPositions[i]);
    }
}

这是代码的作用:它在位数组seqToCheck[]中找到'1'的位置。它通过逐个字节地调用detectFaults来实现。{{1返回一个小数组,其中包含传递给它的字节中'1'的位置 - 它在detectFaults数组中返回这些值。这个函数然后偏移这些位置并放入'1'的真实位置在faultsAt数组中。我输入的数据在位置8,24和28处有1个。

您会注意到我在运行时确定faultPositions的大小。如果我选择LLVM,则第一个printf语句打印出来:8,24和28 - 这是正确的。第二个printf语句打印“32,24和28”让我感到困惑。如果我将编译器更改为GCC4.2,则两个printf语句都打印8,24和28。

总的来说,这与我无关。该代码针对AVR-GCC所以它应该没问题(我希望),但我仍然感到困惑,想知道为什么会发生这种情况。

0 个答案:

没有答案