我对下面的代码有一个小问题。 VS 2010 编译它, 运行并获得预言结果。 但是当我试图与 Qt 创造者编译这个代码时, 我每次得到警告 : “ 预想的象征 ” 都得到了 。 是的, 程序将由 Qt 创造者运行, 但程序会爆炸。 这个代码有什么问题 :
#include <stdio.h>
#include <stdarg.h>
#define ARR_SIZE 2
int **getAddresses(int amount, ...)
{
static int *arr[ARR_SIZE] = {};
va_list vl;
if(amount > 0)
{
va_start(vl, amount);
int i;
for(i = 0; i < amount; i++)
{
*(arr + sizeof(int) * i) = va_arg(vl, int*); //This one is highlighted by the Qt Creator.
}
va_end(vl);
return 0;
}
else
{
return arr;
}
}
int main(void)
{
int a = 3, b = 5;
getAddresses(ARR_SIZE, &a, &b);
printf("BEFORE: %d, %d
", a, b);
int **res = getAddresses(0), i;
for(i = 0; i < ARR_SIZE; i++)
{
*(*(res + sizeof(int) * i)) += 5;
}
printf("AFTER: %d, %d
", a, b);
return 0;
}
感谢您事先给出的答案
ADDED: Qt 创建者突出显示代码 * (arr + sizef(int) * i) = va_arg(vl, int* ) 的这一行;
此外,Dev++能够在没有任何警告和错误或压碎的情况下运行这个代码。
海合会能够按照Fedora Linux 14编集:
[Admin@localhost testerprog]$ gcc tester.c -o tester
[Admin@localhost testerprog]$ ls
tester tester.c
[Admin@localhost testerprog]$ ./tester
BEFORE: 3, 5
AFTER: 8, 10
[Admin@localhost testerprog]$
海合金版本为4.5.1 20100924(红帽子4.5.1-4)