tcl/tk学习笔记《二》 tcl/tk概览二

本文介绍了Tcl/Tk中的while循环控制结构,并详细解析了其执行过程。通过查看源码,阐述了while循环的预处理、Tcl_EvalObjEx的执行以及后处理程序的三个步骤,强调了while命令如何调用其他Tcl命令并利用回调函数执行后续操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(6) 控制结构(粗略看一下)    http://www.tcl.tk/man/tcl8.6/TclLib/NRE.htm#M5
          tcl的控制语言结构,如下看一下while循环
           while  {val > 0} {
                    result  *= val ;
                    val   -= 1;
           }
           大家可以看到,这个语句是“while   {语句一}   {语句二}”这样的方式出现的,  我现在给大家说,这个while循环的过程 ,这个tcl脚本解释器,这个跟shell脚本解释器其实差不多,这个解释器特别简单,它就只能解释单个的tcl指令,或者执行多个单个命令的过程集合。他就是简答的替换,while循环处理的过程如下图
           
关于上面说的这些个处理过程,我事先查看了一下关于这个while循环的源码,大家有兴趣的话可以自己查看, 如果你实在看不懂源码里面的细节内容的话,可以参照我开头给的那个链接,点进去看看源码里面的每个函数主要的功能在哪里,然后你一个一个去对照,也能看懂,所以我就是先打开开头那个链接,查看一下关于一个 TclNRAddCallback的 函数,然后再说说源码,首先这个 TclNRAddCallback 这个函数呢,其实是一个宏定义,在tclInt.h文件中
 定义 :  #define TclNRAddCallback (interp,postProcPtr,data0,data1,data2,data3)
关于这个函数的官方解释如下

Tcl_NRAddCallback是  当在interp指定的解析器中的当前跳转函数指令返回的时候调用的一个C的回调函数,这哥们有6个参数
第一个参数是 : interp 解析器的指针
第二个参数是 : Tcl_NRPostProc * postProcPtr 的指针指向的回调函数
后面的就是几个参数
typedef int   Tcl_NRPostProc (
             ClientData data [],
              Tcl_Interp * interp ,
             int result );
当跳板函数调用回调函数的时候,这个data参数是指向一个包含4个参数的数组传递给 Tcl_NRAddCallback的data0到data3中,tcl解析器被interp这个参数指定的,result函数的值则是有命令指向的结果赋值进去的,result的值可能为:( TCL_OK ,   TCL_ERROR
1引言 2语法 2.1脚本、命令和单词符号 2.2置换(substitution) 2.2.1变量置换(variable subtitution) 2.2.2命令置换(command substitution) 2.2.3反斜杠置换(backslash substitution) 2.2.4双引号和花括号 2.3注释 3变量 3.1简单变量 3.2数组 3.3相关命令 3.3.1set 3.3.2unset 3.3.3append和incr 4表达式 4.1操作数 4.2运算符和优先级 4.3数学函数 5List 5.1list命令 5.2concat命令: 5.3lindex命令 5.4llength命令 5.5linsert命令 5.6lreplace命令: 5.7lrange 命令: 5.8lappend命令: 5.9lsearch 命令: 5.10lsort命令: 5.11split命令: 5.12join命令 6控制流 6.1if命令 6.2循环命令:while 、for、 foreach 6.2.1while命令 6.2.2for命令 6.2.3foreach命令 6.2.4break和continue命令 6.2.5switch 命令 6.1eval命令 6.2source命令 7过程(procedure) 7.1过程定义和返回值 7.2局部变量和全局变量 7.3缺省参数和可变个数参数 7.4引用:upvar 8字符串操作 8.1format命令 8.2scan命令 8.3regexp命令 8.4regsub命令 8.5string命令 8.5.1string compare ?-nocase? ?-length int? string1 string2 8.5.2string equal ?-nocase? ?-length int? string1 string2 8.5.3string first string1 string2 ?startindex? 8.5.4string index string charIndex 8.5.5string last string1 string2 ?startindex? 8.5.6string length string 8.5.7string match ?-nocase? pattern string 8.5.8string range string first last 8.5.9string repeat string count 8.5.10string replace string first last ?newstring? 8.5.11string tolower string ?first? ?last? 8.5.12string toupper string ?first? ?last? 8.5.13 string trim string ?chars? 8.5.14string trimleft string ?chars? 8.5.15string trimright string ?chars? 9文件访问 9.1文件名 9.2基本文件输入输出命令 9.3随机文件访问 9.4 当前工作目录 9.5文件操作和获取文件信息 10错误和异常 10.1错误 10.2从TCL脚本中产生错误 10.3使用catch捕获错误 10.4其他异常 11深入TCL 11.1查询数组中的元素 11.2 info命令 11.2.1变量信息 11.2.2过程信息 11.2.3命令信息 11.2.4 TCL的版本和库 11.2.5 命令的执行时间 11.2.6 跟踪变量 11.2.7 命令的重命名和删除 11.2.8 unknown命令 11.2.9自动加载 12历史记录 13TCL和C\C++ 13.1生成自己的TCLSH 13.2扩展自己的命令:方法(一) 13.2.1编写扩展命令对应的C/C++过程 13.2.2注册命令 13.2.3命令返回值和命令对应的过程的返回值 13.3扩展自己的命令:方法() 13.3.1Tcl_Obj结构 13.3.2编写扩展命令对应的C/C++过程 13.3.3注册命令 13.4利用clientData参数和deleteProc参数 13.5在C/C++应用程序中嵌入TCL 14总结
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值