声明一个没有 return 任何东西且没有任何参数的函数是否合法?

Is it legal to declare a function that doesn't return anything and doesn't have any arguments?

我见过没有 return 任何东西的函数,它们被声明为:

void foo()

我还见过没有任何参数的函数,如:

int foo(void)

同时申报两者是否合法且良好?如:

void foo(void)

如评论中所述,好的做法取决于上下文。以下面的函数不接受任何参数,也不 return 任何东西为例:

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

    printf("\n");
}

可以成为模块化代码的一个简单的好例子。此外,它增加了代码的可读性,以后可以轻松地重用它。

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

旁注:我个人从不使用这些类型的函数来更改全局变量。也许这只是我的个人品味,但我相信使用这些函数更改全局变量会极大地增加代码歧义。

如果您的函数在 C 中不接受任何参数,function_name(void) 是在 C 中指定的方法。

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

在纯 C 中,最好避免在新代码中使用无原型声明。

如果您使用 -Wstrict-prototypes 编译,

gccclang 将警告您它们,或者您可以使用 -Werror=strict-prototypes.[= 使它们成为编译中止错误19=]