资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

c语言提前识别函数名,c语言函数标识符

c语言的函数名怎样记

函数名的记忆应靠理解,不应该死记硬背。

创新互联-专业网站定制、快速模板网站建设、高性价比桐庐网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式桐庐网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖桐庐地区。费用合理售后完善,十余年实体公司更值得信赖。

在C语言中,需要使用的函数有多种,将他们分类,实际上,已经进行分类了,查看一下头文件即可。如

stdio.h --- standard input/output 标准输入输出头文件

string.h -- string 字符串

math.h -- 数学

conio.h -- console input/output 控制台头文件 等等 。

再如:

c语言中用到的输入输出函数

基本【scanf , printf】

控制台基本【 cscanf , cprintf】

字符串基本【 sscanf , sprintf 】

文件基本【 fscanf , fprintf 】 等等

单个字符操作: 【putc,getc】 【putchar,getchar】 【fputc,fgetc】 等等

字符串函数: strlen -- string length ; strcpy --- string copy ;

自己仔细分析就可举一反三。

C语言可以通过函数名来找这个函数吗?

这个问题涉及到词法份分析和语法分析,会比较复杂,如果有其他更好的实现,建议用其他更好的实现,比如手动地将源文件中的函数编入一个列表等等。如果真要分析一个.c源文件的函数,可以从以下几个方面设计:

用getcher()逐个字符读入并分析

统计花括号即{}的层次,从0层开始,遇到'{'层级加1,遇到'}'层级减1,函数定义和变量定义只会在最外层也就是第0层

函数定义通常有如下的形式(正则表达式)

/^[a-zA-Z_][a-zA-Z0-9_]?\s[a-zA-Z_][a-zA-Z0-9_]?(\s)? \( [a-zA-Z0-9_,/s]? \)

?代表0次或多次 \s表示任何形式空格,用正则表达式工具很易于实现。在最外层运用正则表达式工具或者手工编写识别器很容易识别。

但是这种识别只能适用于直接定义的函数,并且不能辨识和区分通过宏定义定义的函数以及调用宏的语句,且即使识别出了函数以及函数的签名,也不能通过c语言调用该函数。

c语言函数内部获取调用该函数的函数名?

获取不到,函数名在连接时被替换成函数入口地址,实际运行的程序中通常不存在函数名(PE文件如果有函数导出表则导出表中可能会记录函数名)。变量名同理。

编写一个c语言程序要求找出原函数中的函数名

在函数中需要函数名的地方写上 宏 __func__就可以了

#include stdio.h

const char* func1()

{

return __func__; //这语句类似return (char *)"func1";

}

void func2()

{

printf("call function %s\n", __func__);

}

int

main(void)

{

printf("function name %s\n", func1());

func2();

return(0);

}

运行结果:

function name func1

call function func2

关于用vba识别c语言函数名字

这个用正则表达式会比较好吧。

大概这个样子:"[a-zA-Z]+\s+.+\(.*\)"

函数判断分函数声明、函数定义和使用的函数三种,我觉得判断第一种会比较准确,第二种有歧义需要细化,第三种无法判断(因为C语言太灵活,在没有支持库的情况下,C编译器自己也判断不出来的)

如何用C语言识别一个C程序的注释和函数?

/* */ 主要是字符匹配的问题,检索 / 和 * ,如果检索到 * 和 / ,哨兵变量为 1 ,否则为 0 ;

//主要是检索到 / 和 / 就可以,以后这一行都是注释了。

头一个注释可以应用于 printf 中,后者不可以。

---------------------

以上均是个人理解,如有错误,请高手指正。


新闻名称:c语言提前识别函数名,c语言函数标识符
标题链接:http://cdkjz.cn/article/hoipid.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:400-028-6601 / 大客户专线   成都:13518219792   座机:028-86922220