声明一个没有 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
编译,gcc
和 clang
将警告您它们,或者您可以使用 -Werror=strict-prototypes
.[= 使它们成为编译中止错误19=]
我见过没有 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
编译,gcc
和 clang
将警告您它们,或者您可以使用 -Werror=strict-prototypes
.[= 使它们成为编译中止错误19=]