我对下面编写的代码有一个小问题。VS 2010 编译它,运行,我得到了预测的结果。但是,当我尝试使用 Qt Creator 编译此代码时,我每次都会收到此警告:“预期的令牌 ')' 得到了 int”。是的,程序将由 Qt Creator 运行,但程序会崩溃。这段代码有什么问题:
#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\n", a, b);
int **res = getAddresses(0), i;
for(i = 0; i < ARR_SIZE; i++)
{
*(*(res + sizeof(int) * i)) += 5;
}
printf("AFTER: %d, %d\n", a, b);
return 0;
}
事先感谢您的回答。
添加:Qt Creator 突出显示这行代码 *(arr + sizeof(int) * i) = va_arg(vl, int*);
此外,Dev++ 能够在没有任何警告和错误或崩溃的情况下运行此代码。
GCC 能够在 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]$
GCC 版本是 4.5.1 20100924 (Red Hat 4.5.1-4)