我想问问这种声明的风格是谁教的……我怎么看到18级好多人都这样写?
根据《Pointers on C》P169,这种代码风格在那个时候十分的危险,当然,到了现在编译器虽然智能了,会提醒你有问题,但是不值得提倡。
主要想法是:相同函数名被不同的函数在函数体里面声明原型,导致错误。
#include<stdio.h>
void f1(){
int *p = NULL;
void out(int,int*);
out(2,p);
}
void f2(){
int *p = NULL;
void out(int*,int);
out(p,2);
}
int main(){
f1();
f2();
return 0;
}
void out(int i,char n){
printf("int = %d, char = %c",i,n);
}
会报如下错误(按照书上的说法,它不会报错,但是它的确报错了。):
Prototypes.c: In function ‘f2’:
Prototypes.c:11:7: error: conflicting types for ‘out’
void out(int*,int);
^~~
Prototypes.c:5:7: note: previous declaration of ‘out’ was here
void out(int,int*);
^~~
Prototypes.c: At top level:
Prototypes.c:21:6: error: conflicting types for ‘out’
void out(int i,char n){
^~~
Prototypes.c:11:7: note: previous declaration of ‘out’ was here
void out(int*,int);
此处我已尽力还原书上的意思,如有不对请提出。