我见过不返回任何东西的函数,它们声明为:
void foo()
我还看到了没有任何参数的函数,例如:
int foo(void)
同时声明两者是否合法?如:
void foo(void)
答案 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
使它们成为编译中止错误。