当前位置:  技术问答>linux和unix

C关于函数的申明的疑惑?

    来源: 互联网  发布时间:2016-03-30

    本文导语:  extern int Svrinitfunc _(( int, char ** )); extern int Svrtranfunc _(( int )); extern int SvrtranfuncA  _(( int,int )); extern void Svrdonefunc _(( void )); extern int bcl_send_fileds _(( int , int , void *, int )); extern int bcl_tcp_accept _(( ...

extern int Svrinitfunc _(( int, char ** ));
extern int Svrtranfunc _(( int ));
extern int SvrtranfuncA  _(( int,int ));
extern void Svrdonefunc _(( void ));

extern int bcl_send_fileds _(( int , int , void *, int ));
extern int bcl_tcp_accept _(( int,u_int *,u_short *  ));
extern void bcl_sig_add_blkmask _(( int )) ;
extern int DTASvrInitByInstId _(( char *,int ,char **,int ));
int bcl_bytesreadable _(( int ));
Sigfunc bcl_sig_sethandler _(( int , Sigfunc ));

static int start_one _(( int ));
static int restart_one _(( pid_t, int ));
static void clear_conn_array _(( int ));
static int asyn_start_one _((int,int));
static int get_max_all_conn _(( void ));
请大虾们看清函数特征,我不明白的是,为什么要在函数名后加以空格,然后紧接低划线。

至于extern,static的说明请省略。

|
用于兼容K&R的函数声明 
K&R的函数声明只需要: 
int fclose(); 
ANSI的函数声明要求: 
int fclose(FILE *); 
一般的用法: 
 

#ifndef __P 
#if (__STDC__-0) ¦ ¦ defined (__cplusplus) 
#define __P(x) x 
#else 
#define __P(x) () 
#endif 
#endif 


void clearerr __P((FILE *)); 
int fclose __P((FILE *)); 
int feof __P((FILE *)); 
int ferror __P((FILE *)); 
int fflush __P((FILE *)); 
int fgetc __P((FILE *)); 
int fgetpos __P((FILE *, fpos_t *)); 
char *fgets __P((char *, size_t, FILE *)); 


|
用于兼容K&R的函数声明
K&R的函数声明只需要:
int fclose();
ANSI的函数声明要求:
int fclose(FILE *);
一般的用法:


#ifndef __P
#if (__STDC__-0) || defined (__cplusplus)
#define __P(x) x
#else
#define __P(x) ()
#endif
#endif


void  clearerr __P((FILE *));
int  fclose __P((FILE *));
int  feof __P((FILE *));
int  ferror __P((FILE *));
int  fflush __P((FILE *));
int  fgetc __P((FILE *));
int  fgetpos __P((FILE *, fpos_t *));
char *fgets __P((char *, size_t, FILE *));


|

哪个文献?
最权威的就是C语法的lex和yacc表示,没有任何迹象表明后面不可以有空格。

|
_() 是一个宏定义,这样写是为了跨平台用的

|
替换后,函数名与形参之间有空格不会影响,符合语法规则。

|

那后面有空格就是特殊的函数规则,不是一般的函数规则。呵呵
你可以自己写一个为函数试试,看看语法正确不正确,编译能不能通过。

|
编译成汇编码后一模一样。

$ cat x.c
#include 

int foo(void);

int
main(void)
{
        return 0;
}

int
foo(void)
{
        return 0;
}

$ cat y.c
#include 

int foo    /* foo */                (      void    );

int
main(void)
{
        return 0;
}

int /* foo */  foo(void)
{
        return 0;
}

$ cc -S x.c y.c
$ diff x.s y.s
1c1
       .file   "y.c"


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Maps 成员 key_comp():返回比较元素key的函数
  • 请问:定义了2个函数,其中第一个函数要访问另外一个函数的变量,怎么处理阿?谢谢
  • C++ Maps 成员 value_comp():返回比较元素value的函数
  • 如果知道一个函数的地址或函数名,如何得到函数所在的文件名?
  • C++ MultiMaps 成员 key_comp():返回比较key的函数
  • java的数学函数在那个类中,如幂函数、指数、对数、双曲线函数等?
  • C++ MultiMaps 成员 value_comp():返回比较元素value的函数
  • 一个父类的构造函数的参数是(Applet applet),请问它的子类构造函数当中应怎样调用父类构造函数?
  • C++ STL Bitsets构造函数及成员函数解释及代码示例
  • 虚函数被类的构造析构函数和成员函数调用虚函数的执行过程
  • C++ Strings(字符串) 成员 Constructors:构造函数,用于字符串初始化
  • 在内核的某个函数中,如何能知道是哪个用户空间的函数调用了它,以及这个用户空间函数所在的文件?
  • linux c 生成随机数srand函数和rand函数介绍及代码示例
  • 在dos下访问内存的MK_FP函数在linux下对应什么函数?int86()函数呢?
  • Linux下gettimeofday()函数和clock()函数:精确到毫秒级的时间
  • 一个静态库包含多个函数,应用程序连接了库中的某个函数,应用程序目标代码中是否还包含了该静态库中的其他函数代码?
  • Linux c++虚函数(virtual function)简单用法示例代码
  • Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • js的众多函数令小弟实在搞不清楚!哪有函数速查手册之类的软件或者书籍!谢了!比如,setInterval、clearInterval这两个函数是干什么的?
  • cityhash 32位,64位和128位介绍及函数列表
  • 虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3