hanghanga 发表于 2023-11-14 20:06:45

请大家帮我看一下这是怎么回事

为什么注释了func函数的声明后,main函数中的func前面加上extern后就不执行这一行了
#include <stdio.h>

//void func(void);

int main(void)
{
        extern int count;

        extern func();
        count++;
        printf("In main, count = %d\n", count);       

        return 0;
}

int count;

void func(void)
{
        count++;
        printf("In func, count = %d\n", count);
}

结果:
In main, count = 1

isdkz 发表于 2023-11-14 20:06:55

问题出在你的代码中,你在main函数中使用了extern来声明func函数,但实际上func函数是没有被声明为外部函数的。当你注释掉func函数的声明后,编译器会默认认为func函数是一个int类型的函数。然而,如果你使用extern来声明func函数,编译器就会认为func函数是一个未知类型的函数,因此在执行count++时会遇到问题。

解决方案是在main函数中使用void func(void)来声明func函数,这样编译器就知道func函数的类型,就可以正确执行了。代码应该修改为:

#include <stdio.h>

void func(void);

int main(void)
{
    extern int count;
    extern void func();
    count++;
    printf("In main, count = %d\n", count);

    return 0;
}

int count;

void func(void)
{
    count++;
    printf("In func, count = %d\n", count);
}


这样修改后,你的代码就可以正确执行了。
页: [1]
查看完整版本: 请大家帮我看一下这是怎么回事