69,759
社区成员
发帖
与我相关
我的任务
分享
//1)靠左写
int* p;
//2) 靠右写
int *p;
//3) 两边都不沾,这个,对于标识符识别,最有利,一律用空白分开。
int * p;
由于,分开写多了一个空格,
又不便,表达程序员的额外意图(强调定义指针,还是强调定义的指针,指向的类型)
所以一般就不写两个空格。
靠左写
int* p;
强调定义的p,是个 int 类型的指针 int*
缺点是
int* p,q;这是定义两个指针,还是一个指针,一个整型变量???
这么看来int* 连写,的意义就失去了,
因为, 这不是定义两个指针,而是一个指针p,一个整型变量q;
靠右写int *p;
强调,对于指针p; *p 的类型,是个整型int;(指针是个整型指针);
同时,对于同时定义多个指针,不至于漏写 *号;
int *p,*q; 定义两个指针;如果从这里来看,*靠右边更加靠谱一点。
这么看来,三种写法,各有道理,怎么写都很好,看不出那种更合适。
(* a)=0; //int *a
(* b)() = 0; //int (*b)(...)
main(void){return 0;}
老的标准是可以省略某些int的,比如上面的几种情况,所以猜测是一个语句的第一个符号如果是括号,那么几乎期待下一个就是*(去掉其他直接修饰指针的扩展比如__stdcall不论),
这个观点我没有查阅ANSI C的BNF(or EBNF)规则,希望知道标准的大大能告诉我一下
/*libc中signal原本的类型实际上是*/
void (*signal(int sig, void (*func)(int)))(int);
/*现在另给这类型一定义*/
typedef __typeof(
__typeof(void (*)(int)) /*返回一个函数指针为某某类型*/
(int, __typeof(void (*)(int))) /*的函数,参数是int, 和一个函数指针*/
)
*signal_id_prototype; /*的函数指针是singal_id_prototype;*/
int main(){
signal_id_prototype s = signal; /* 必须相同类型函数指针才能在最严格模式不出警告或者错误 */
return 0;
}