声明一个不返回任何东西且没有任何参数的函数合法吗?

时间:2019-12-08 19:24:17

标签: c void

我见过不返回任何东西的函数,它们声明为:

void foo()

我还看到了没有任何参数的函数,例如:

int foo(void)

同时声明两者是否合法?如:

void foo(void)

2 个答案:

答案 0 :(得分:4)

如评论中所述,良好实践取决于环境。以以下不带任何参数且不返回任何内容的函数为例:

void drawSpecialSeparator(void) {
    int i = 0;
    for (; i < 10; i++) {
        printf("%s", (i % 2) ? "--" : "++");
    }

    printf("\n");
}

可以是一个简单的很好的示例,它将您的代码模块化。此外,它提高了代码的可读性,以后可以轻松地重用它。

因此,在正确的上下文中使用此类功能是一种很好的做法。

侧面说明:我个人从不使用这些类型的函数来更改全局变量。也许这只是我的个人喜好,但我相信使用这些函数对全局变量进行更改会大大增加代码的歧义。

答案 1 :(得分:3)

如果您的函数在C语言中不接受任何参数,则function_name(void)是在C语言中进行指定的方式。

function_name()已过时,导致编译器的类型检查功能较弱(因此很容易出错),并且可能导致编译器为函数生成less optimal calling code 。 (在C ++ void foo();中与void foo(void);完全相同,但是在C语言中它们是不同的。)

在普通C语言中,最好只是避免在新代码中进行无原型声明。

如果使用gcc进行编译,

clang-Wstrict-prototypes会警告您,或者您可以使用-Werror=strict-prototypes使它们成为编译中止错误。