Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么叮当声没有';t使用未初始化的数组时发出警告?_C_Gcc_Clang - Fatal编程技术网

C 为什么叮当声没有';t使用未初始化的数组时发出警告?

C 为什么叮当声没有';t使用未初始化的数组时发出警告?,c,gcc,clang,C,Gcc,Clang,我读了一本书中的一些代码,忘记了初始化数组弹珠。但是我没有从叮当声中得到任何警告。 代码如下: /* sum_arr2.c -- 对一个数组的所有元素求和 */ #include<stdio.h> #define SIZE 10 int sump(int *start,int * end); int main(void) { int marbles[SIZE]; long answer; answer = sump(marbles,marbles + SI

我读了一本书中的一些代码,忘记了初始化数组弹珠。但是我没有从叮当声中得到任何警告。 代码如下:

/* sum_arr2.c -- 对一个数组的所有元素求和 */
#include<stdio.h>
#define SIZE 10
int sump(int *start,int * end);

int main(void)
{
    int marbles[SIZE];
    long answer;

    answer = sump(marbles,marbles + SIZE);
    printf("The total number of marbles is %ld.\n",answer);
    return 0;
}

/* 使用指针算术 */
int sump(int * start,int * end)
{
    int total = 0;

    while(start < end)
    {
            total +=*start; /* 把值累加到total上*/
            start++;        /* 把指针向前推进到下一个元素 */
    }
    return total;
}
没有得到任何警告。 所以我试过了

clang -Wall sum_arr2.c
仍然没有警告。 当我执行程序时

./a.out
输出是一些随机值

所以我想问,这是编译器的正确行为,还是一个bug? 似乎gcc只是一个名称,而不是真正的gcc编译器:

gcc -v

Configured with: --     prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix

clang -v
Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix

有人能在gcc上测试它吗?

大多数编译器在生成警告时一次只查看一个函数,如果不查看
pull
的实现,就无法知道
main
中的调用是错误的。如果
sump
写入数组而不是从数组中读取,该怎么办?在这种情况下,传递未初始化的数组不会有问题

int sump(int * start,int * end)
{
    while(start < end)
    {
        *start = 42;
        start++;
    }
    return 17;
}
int集水坑(int*start,int*end)
{
while(开始<结束)
{
*开始=42;
启动++;
}
返回17;
}

您是否有更多关于
gcc-W-Wall sum\u arr2.c
的警告?gcc生成一个带有
-O3
的警告。
int sump(int * start,int * end)
{
    while(start < end)
    {
        *start = 42;
        start++;
    }
    return 17;
}