此处不允许使用功能定义

时间:2018-07-24 00:27:22

标签: c

我有以下代码:

#include <stdio.h>
int main()
{
    void echoNumber()
    {
        int num;
        printf("Enter a number:");
        scanf("%d", &num);
        printf("You entered %d", num);
    }
    echoNumber();
    return 0;
}

但是当我尝试对其进行编译时,它会返回error: function definition is not allowed here,我不确定自己做错了什么吗?

4 个答案:

答案 0 :(得分:2)

函数定义在C中的main()之外

#include <stdio.h>

void echoNumber() {
    int num;

    printf("Enter a number:");
    scanf("%d", &num);
    printf("You entered %d", num);
}

int main() {
    echoNumber();
    return 0;
}

答案 1 :(得分:2)

C没有嵌套函数。将echoNumber移到main之外,例如

#include <stdio.h>

void echoNumber()
{
    int num;
    printf("Enter a number:");
    scanf("%d", &num);
    printf("You entered %d", num);
}

int main()
{
    echoNumber();
    return 0;
}

答案 2 :(得分:2)

您在做错的是根本没有意识到C不是Pascal :-) Pascal在函数内具有函数的概念,其中前者的“可见性”仅限于后者。换句话说,您从其他任何地方都看不到内部功能。

C中没有在功能内具有功能的功能。与您拥有的最接近的是:

#include <stdio.h>

static void echoNumber()
{
    int num;
    printf("Enter a number:");
    scanf("%d", &num);
    printf("You entered %d", num);
}

int main()
{
    echoNumber();
    return 0;
}

static前面的echoNumber将其“可见性”限制为文件其余部分的“可见性”。这不像Pascal模型那么严格,但是只要您对代码进行良好的组织,它将同样有效。


您会注意到,我在上面引用了可见性一词。我使用的是通用英语术语(表示“您可以从哪里看到”),而不是使用preoper ISO标准的术语,因为我发现那些不熟悉该标准的人更容易理解。

答案 3 :(得分:0)

#include <stdio.h>
void echoNumber()
{
    int num = 0;
    puts("Enter a number:");
    scanf("%d", &num);
    printf("You entered %d", num);
}
int main()
{

  echoNumber();
   return 0;
}

问题在于,在C中,这不是您声明函数的方式。除非您不是要声明echoNumber,而是要使代码成为本地作用域,否则请

int main()
{
    {
    int num = 0;
    puts("Enter a number:");
    scanf("%d", &num);
    printf("You entered %d", num);
    }
    return 0;
}