allegro skill使用说明详解
- 格式:pdf
- 大小:1.21 MB
- 文档页数:43
Cadence应⽤如何在allegro中使⽤skillCadence软件应⽤:如何在Allegro中执⾏SkillHow to Perform Skills in Allegro ToolsDoc Scope : Allegro SkillDoc Number : SFTEC11005Author : Daniel ZhongCreate Date : 2011-11-09Rev : 1.00⽬录1Skill简介 (3)2在Allegro命令⾏中加载和调⽤Skill (3)2.1命令⾏加载Skill (3)2.2命令⾏调⽤Skill (4)3在Allegro启动时加载Skill (5)3.1allegro.ilinit⽂件 (5)3.2编辑allegro.ilinit (7)4在Allegro菜单栏上调⽤Skill (8)4.1Allegro系列⼯具的菜单⽂件(.men) (8)4.2菜单⽂件搜索路径 (10)4.3定制菜单 (11)1Skill简介Skill是Allegro软件⼆次开发的接⼝,⽤此语⾔编译的⽂件可以在Allegro中载⼊和调⽤。
我们可以通过编写不同的Skill程序⽂件,在Allegro⼯具中实现各种原有命令不能实现或不⽅便实现的功能。
Skill语⾔的语法结构和C++语⾔类似,⼯程师如果有⼀定C语⾔编程基础,使⽤Skill语⾔时就会很⽅便了。
对于Skill程序的⽤户,不需要对Skill语⾔有过多的了解,只需要知道如何在Allegro中加载和调⽤Skill即可,本⽂就是介绍了如何加载和调⽤Skill,可以采⽤两种⽅式:■在Allegro命令⾏中加载和调⽤■在Allegro启动⾃动加载,在Allegro菜单上调⽤2在Allegro命令⾏中加载和调⽤Skill本章介绍如何在Allegro命令⾏中加载和调⽤Skill,分为以下两个⼩节:■命令⾏加载Skill■命令⾏调⽤Skill2.1命令⾏加载Skill以本站资源下载中的⼀个skill程序clinecut.il为例,将此⽂件移动或复制allegro设计⽂件(.brd)所在⽬录。
AllegroSkill加载–LayoutoTiny_Y如何加载skill按照Allegro的启动逻辑,软件启动时会自动加载allegro.ilinit文件,所以常规通过此文件加载skill文件(当然你也可以直接在打开的Allegro软件中直接加载,仅对此次加载生效)1.获取Skill文件,放到指定目录(见下方skill文件内容)2.打开allegro.ilinit文件,加载上方的skill文件(见allegro.ilinit文件内容)3.这样每次启动Allegro软件时,skill文件都会被加载如何调用skill功能CIW直接在Skill环境下,调用函数,如getSkillPath()是一个定义好的skill功能,在Command窗口直接输入skill getSkillPath()则可以直接执行这个程序。
skill环境内容参考后面的资料PCB Editor搭载SKILL 环境Bindkeys见后续章节axlCmdRegisteraxlCmdRegister( “20” 'BOTTOM)一般设计者会将skill程序,使用axlCmdRegister注册一个快捷命令,一同写在il文件中(但其实写在任何skill环境的文件中并被加载,都能生效),这样通过定义的快捷命令即可调用此skill功能更多见Cadence SKILL 第二节语言一览,SKILL函数调用章节内容Allegro PCB启动1.读取allegro PCB 编辑器的env 文件2.然后运行allegro.ilinit 文件3.最后自动加载菜单配置文件allegro.menallegro.ilinit文件用户在程序启动时加载的skill代码。
顺序在在加载数据库或菜单之前,如果需要在数据库打开时执行操作,请通过axlTriggerSet API 注册回调触发器Allegro默认识别两个路径X:\Cadence\SPB_XX.X\share\pcb\etc;%home%\pcbenv。
SKILL中数据的输出控制1.数据的输出可以使用以下函数print、println、printfprint和println对不同数据类型采用默认显示格式。
print和println采用以下格式显示数据:print与println的区别print直接在之前的数据后面输出,而println在每次输出的最后会加一个换行符。
请看下面例子:for( i 1 3 print( "hello" )) ;Prints hello three times. "hello""hello""hello"for( i 1 3 println( "hello" )) ;Prints hello three times."hello""hello""hello"printf 函数printf函数采用格式输出。
其格式一般为:printf(格式控制,输出表列)比如:printf("\n%-15s %-15s %-10d %-10d %-10d %-10d" layerName purpose rectCount labelCount lineCount miscCount)上面例子中,printf括号中包含两个部分:第一个部分为格式控制,是用双引号括起来的字符串。
其中包含有各个格式说明,由格式说明符号”%”和格式字符组成。
比如上例中的”%d”、”%s”。
一般”%”后面为格式字符。
格式控制中还可包含普通的字符,普通字符不会转换,直接输出。
第二部分为输出表列,输出表列为输出的各个数据,也可以是表达式。
比如下面例子:printf(“a=%d b=%d a+b=%d” a b a+b)当a=2 b=3时,以上printf函数输出为“a= 2 b=3 a+b=5”以下为一些常见的转义字符:%d 整数(十进制)%f 浮点型%s 字符串或symbol%c 字符输出,只输出一个字符%n 数值%L List%P 坐标点%B Bounding Box请参考下面的例子:aList = '(1 2 3)printf( "\nThis is a list: %L" aList ) => tThis is a list: (1 2 3)aList = nilprintf( "\nThis is a list: %L" aList ) => tThis is a list: nil如果printf中数据类型如果与格式说明中的不匹配,那么printf函数将会产生一个错误!比如:printf( "%d %d" 5 nil )Message: *Error* fprintf/sprintf:format spec. incompatible with data –nil上例中,第二个格式说明为输出整数,但是传递的为nil。
Allegro使用技巧这几个分别是通用,布局,布线。
右键不一样,注意区别,最后一个是修剪直角。
Allegro技巧有太多了,就先选择我们会用到的10个类型。
Allegro封装神器FPM,写进教科书的网友作品。
快速生成封装。
•快速丝印丝印摆放总共分三步。
第一步调整统一大小先打开丝印层。
选择Edit-change,在find中只选择text,options中只选择text block并设置成自己需要的字体。
框选左右丝印。
第二步全部居中Manufacture-label Tune弹出label tune:配置如上,框选所有字体。
字体自动对齐器件中心。
如果没有label Tun选型,选择file-change edit勾选allegro productivity toolbox第三步放到合适位置可以第二步中的Center text设置好便宜距离之后,框选对应字体,对于0603元件通常短边60,长边110。
对于不规则或者密集器件,只能手动摆放。
•器件对齐除了选择大个网格摆放对齐外,对于高密度板,我们可以利用allegro的对齐功能进行器件对齐1.选择第二个placementedit2.框选需要对齐器件后,右键选择Align components 根据需要选择对齐模式,同时可以通过equal spaceing选择间距。
•Env文件Env可以快速的配置快捷键,比如实现AD里面的“空格”旋转器件(这里设置的是R)。
我们通常配置为全局量。
位置在...\Cadence\SPB_Data\pcbenv 下,直接替换即可。
替换前注意保存原来的set padpath等路径。
不然替换后还要重新设置路径。
快捷键有两种alias和funckey,Alias对于字母、数字类快捷键需要回车才会执行,Funckey则无需回车。
部分设置如下:funckey A slide #修线funckey B unrats net #关掉网络飞线funckey C change #改变属性funckey D shape select #修改铜皮funckey E add line #添加没有电气属性的线funckey F Delay Tune #等长蛇形线funckey G define grid #格点设置funckey H hilight #高亮funckey I zoom in #放大funckey J dehilight #取消高亮funckey K swap components #器件位置交换funckey L mirror #镜像funckey M move #移动funckey N show element #查看属性funckey O zoom out #缩小funckey P show measure #测距funckey Q done #完成funckey R angle 90 #旋转90funckey S shape add #添加铜皮funckey T text edit #文本编辑funckey U Assign Color #用颜色高亮funckey V rats net #打开网络飞线funckey W add connect #走线funckey Y Shape Edit Boundary #切割铜皮funckey Z align components #对齐使用注意事项,1.大小写匹配,2.输入快捷键前没有输入其他字母,可以在cmmand栏查看•增加组同样在placementedit下选中需要设置为同一组的元件,右键add to group,这样在移动的时候在find中选中groups,就可以一起移动了•相似布局对于具有相似的元件特别是电源电路,我们可以利用allegro的相似布局功能,快速布局1.先补好一组布局,右键place replicate create,再次右键选择done。
skill添加到菜单
1、调用skill
将skill文件拷到pcbenv文件夹中,如下如所示
然后找到allegro.ilinit文件,也在pcbenv文件夹中,如果没有就新建一个,将刚才的skill文件Load进来,如下图所示
打开skill文件,查看执行命令,如下图所示
axlCmdRegister后面" "跟的就是执行命令,这里执行命令是conv 重启allegro,输入命令conv,弹出如下对话框
2、skill添加到菜单栏
找到allero.men 文件,如下图
打开按照格式添加自己的代码,如下图所示
MENUITEM “&MM to Mil”,"conv" 其中MM to Mil表示菜单,conv表示菜单MM to Mil执行的命令是conv。
重启allegro后,可以看到菜单栏上多了两个,Condor和Heroes。
如下图所示。
单击MM to Mil子菜单,弹出如下图所示窗口
由此可见菜单本身也是调用命令,只是看起来方便些,不需要去记那些命令。
至此skill添加到菜单就全部结束了。
allegro?使用汇总1.如何在allegro中取消花焊盘(十字焊盘)set up->design parameter ->shape->edit global dynamic shape parameters->Thermal relief connects ->Thru pins ,Smd pins -> full contact2.allegro 中如何设置等长setup -> constraints->electrical->net->routing->Min Max Propagation delays选择要等长的net->右击->create->pin pair->选择pin修改 prop daly 的min 和max项3.如何设置allegro的快捷键修改文件$inst_dir\share\pcb\text\env 或$inst_dir\pcbevn\env快捷键定义如下:alias F12 zoom outalias ~R angle 90 (旋转90 度)alias ~F mirror (激活镜相命令)alias ~Z next (执行下一步命令)alias End redisplay(刷新屏幕)alias Del Delete(激活删除命令)alias Home Zoom fit(全屏显示)alias Insert Define grid(设置栅格)alias End redisplayalias Pgdown zoom outalias Pgup zoom inalias F12 custom smoothalias Pgup slidealias Pgdown donealias Home hilightalias End dehilightalias Insert add connectalias Del Delete4.如何在allegro中删除有过孔或布线的层时不影响其他层1.输出specctra的dsn文件allegro->file->export->router->demo.dsn->run2.产生session文件specctra(pcb router)->file->write->session->demo.ses->ok3.删除某一层中的布线和过孔delete(ctrl+D)->..4.删除allegro中的板层setup->cross section->鼠标右键->delete5.导入session文件allegro->file->import->router->demo.ses->run也可先将通过该层的过孔先替换成顶层焊盘,删除该层以后再替换回来5.如何在Allegro中同时旋转多个零件1.Edit->Move 在Options中Rotation的Point选User Pick2 再右键选Term Group 按住鼠标左键不放并拉一个框选中器件多余的可用Ctrl+鼠标左键点击去掉.3. 选好需整体旋转的器件后右键complete.4. 提示你Pick orgion 鼠标左键选旋转中心.5 下面右键选rotate 即可旋转了.6.allegro 16.0 透明度设置display->colour/visibility->display->OpenGL->Global transparency->transparent7.allegro Drill hole size is equal or larger than smallest padsize.Pad will be drilled away.提示Drill hole size is equal or larger than smallest pad size.Pad will be drilled away.不用理睬这一提示8.ALLEGRO 如何生成钻孔文件Manufacture -> NC -> Drill Customization->auto generate symbolsManufacture -> NC -> Drill LegendManufacture -> NC ->NC parameters->enhanced excellon format->closeManufacture -> NC -> NC Drill->auto tool select->optimize drill head travel9.CAM350如何正确导入钻带文件导进去后MACRO->PLAY->选择(CAM350--SCRIPTS)PADS_DRILL->选择钻带的REP文件还没测试过,rep文件从哪儿来的呢10.allegro 如何设置route keepin,package keepin1.setup->area->route keepin,package keepin ->画框2.edit ->z-copy->options->package keepin,route keepin->offset->50->点击外框11.allegro 中如何禁止显示shape完全禁止的方法没找到setup->user preference editor->display->display_shapefill->输入一个较大的数shape在显示时就不是那么显眼了set-user preference editor-shape-no shape fill(v)12.如何在allegro设置自定义元件库路径在下面两个位置添加自定义元件的路径Setup->User Preferences Editor->Design_paths->padpath Setup->User Preferences Editor->Design_paths->psmpath1.在allegro中如何修改线宽在Allegro的Setup->constraints里的set standard values中可定义每一层走线的宽度,比如,可以定义VCC和GND的线宽为10 Mil。
FORM中ENUM的使用方法详解ALLEGRO FORM中ENUM也称为combo box 即组合框。
在FIELD中定义关键词ENUMSET来使用。
使用ENUM前,首先须定义POPUP。
可通过以下方式定义:1.在FORM文件中直接定义一个POPUP来指定ENUM的下拉列表。
比如:POPUP<Layer_Names>"TOP""TOP","GND02""GND02","POWER03""POWER03","BOTTOM""B OTTOM".该字段定义在TILE关键词前面。
2.当FORM文件已经加载,并显示出来。
此时我们可使用AXL函数axlFormBuildPopup 来定义下拉列表。
POPUP “<>”中的内容为POPUP的名称,比如上列中<Layer_Names>,我们可通过Layer_Names来调用该菜单;POPUP中单个选项的基本格式为display/dispatch,比如上例中的"TOP""TOP",其中display 为显示内容,而dispath为该选项的派遣值,即在FORM中,通过form->curValue获取到的值。
当然,这两个参数可以一致。
在FORM中,ENUM共有两种显示方式:1.单行显示,必须通过下拉列表来显示。
定义ENUMSET时,只需要指定其宽度即可。
请参考下面例子:FIELD LayerFLOC 1 1ENUMSET 11POP "Layer_Names"ENDFIELD显示效果如下:2.多行显示。
可显示POPUP中多个下拉选项。
通过指定ENUMSET的长宽来设置。
FIELD LayerFLOC 1 1ENUMSET 11 10POP "Layer_Names"ENDFIELD显示效果如下:例如,定义一个ENUM来获取当前所有ETCH层。
报告大纲1.安装技巧2.功能简介3.实例演示4.讨论反馈一、Stella的安裝1.新建Stella资料夹放*.il程式文件,如路径为C:\。
2.将Stella程序数据夹中的Menu中的内容copy到Allegro的安装目录中,如D:\Cadence\SPB_15.5.1\share\pcb\text\cuimenus中。
3.将Stella程序数据夹中env文件夹中Allegro .ilinit copy 至“Allegro工作路径”\pcbenv内。
4.新增环境变量Stella_skill 值为C:\Stella。
Stella的安裝(这里只介绍一种方法,都大同小异)1、新建Stella资料夹于C:\。
Stella文件夹主要用于放*.IL文件。
此文件夹名称和存放路径都可选。
Stella的安裝2、将Stella程序数据夹中的Menu中的内容copy到Allegro的安装目录中如D:\Cadence\SPB_15.5.1\share\pcb\text\c uimenus中。
实际上就是修改D:\Cadence\SPB_15.5.1\share\pcb\text\cuimenus文件夹中的allegro.men文件,增加菜单功能,增加一栏命令。
Stella的安裝POPUP "&Stella"BEGINMENUITEM "Align Symbol", "align_sym"MENUITEM "DRC Walker...", "drc walk"MENUITEM "Place Xrf", "skill xrfin"MENUITEM "Find Stubs", "find_stubs"MENUITEM "Find Dang Line/Cline", "find_dang"MENUITEM "Hilight Net without TP", "hl_ntp"MENUITEM "Hilight Via without Net", "hlvia"MENUITEM "Netlist Editor", "net_editor"MENUITEM "Mil To Mm", "conv"MENUITEM "Cal", "cal"MENUITEM "Clinecut", "clinecut"END此下面还可继续添加其它命令Stella的安裝三、将Stella程序数据夹中env文件夹中Allegro .ilinit copy 至C:\pcbenv内。
Allegro Skill axl函数简介1.allegro skill简介1.1. AXL-SKILL专用于allegro的skill被称为AXL-SKILL,只有使用这些专用的函数才可以直接访问allegro 的database。
结合skill语法和这些专用函数可以编写出实现各种功能的命令。
专用于allegro 的skill都是以axl开头,比如axlClearSelSet()。
1.2. 运行AXL-SKILL在allegro中输入skill就得到了AXL-SKILL的运行环境,在这样的环境中可以直接调用AXL-SKILL命令/函数,另外输入set telskill可以得到一个尺寸大小可调的skill开发窗口。
(万一没有弹出窗口,尝试在allegro菜单里面,选择setup->userprference->skill->telskill----OK)1.3. AXL-SKILL Databaseallegro中的每个对象object(比如IC元件,net)都有一个对应的dbid(database identifiers),AXL-SKILL操作allegro的也正是这些dbid。
dbid对象:在不同的级别上的dbid是不一样的,比如在Design以及包含的database对象有Property Dictionary,Lines,Text,Polygons,Shapes,Property Definitions,DRCs,Vias that are Padstack object types,Symbols that are Symdef object types,Components,Nets;而在Symbol级别上则是PPins that are Padstack object types,Vias that are Padstack object types,Lines,Arcs,Text,Polygons,Shapes。
allegro skill 干货1-制作焊接丝印图1.Allegro skill 提供了PCB editor 二次开发的可能,它可以使某些繁琐的操作自动化,简单化,例如,在某些情况下我们需要手工焊接时,需要对照原理图,丝印图一一去找器件,这样既浪费了很多时间,同时还导致手工焊接出错。
2.本文讲到方法是,通过写一个skill 脚本的方法,可以使电阻或者电容的值直接标注在相应器件的丝印上,这样可以非常直观的进行焊接。
类似下面这张图一样,是不是非常容易查找到对应的阻容进行焊接。
3.开始讲解实现的过程。
贴上一段代码。
首先注册一个函数,就是allegro加载skill脚本时的名称,脚本可以设置打开allegro时加载,也可以设置成手工加载,后面会详细说明。
下文中黄色高亮的事注释部分,commen Lisp中注释使用;开头。
;申请一个函数axlCmdRegister("AutoHandSilk",'AutoHandSilk);实现这个函数;定义函数为AutoHandSilk,与上文申请的函数名称一致defun(AutoHandSilk ();关闭所有class和subclassaxlVisibleDesign(nil);打开BOARD GEOMETRY/OUTLINE层等等,为后面选中做准备,这里为什么打开; DEVICE TYPE/ASSEMBLY_TOP层呢,是因为只有这个层会有阻容值得信息,例如这;样R_R0603_2.2KaxlVisibleLayer("BOARD GEOMETRY/OUTLINE" t);axlVisibleLayer("PIN/TOP" t)axlVisibleLayer("DEVICE TYPE/ASSEMBLY_TOP" t)axlVisibleLayer("PACKAGE GEOMETRY/PLACE_BOUND_TOP" t);过滤选中的关键字,这里过滤的是textaxlSetFindFilter(?enabled list("noall" "text")?onButtons list("noall" "text"));选中页面上以上显示层的text,这个和实际在allegro环境中框选一样axlAddSelectAll();将选中的text信息赋值给对象allall = axlGetSelSet();去除显示,相当于去除高亮axlClearSelSet();这里是打印一条logaxlMsgPut("DEVICE TYPE/Assy place started.");这里是skill语言也就是commen Lisp语言的for循环foreach(i all;将text值取出来赋值给变量texttext = i ->text;下面这句相当于split字符串的功能,就是把类似R_R0603_2.2K的字符串;中有用的信息2.2K取出来text_list = parseString(text,"_")text=car(last(text_list));去阻容丝印等的原点坐标,注意丝印的原点坐标不是字的正中心,是字底;部的中心xy = i ->xy;取当前丝印的旋转角度txt_rot = round(i ->rotation);将180度都统一用0度表示,90度的统一用270表示cond((txt_rot == 180, txt_rot = 0)(txt_rot == 90, txt_rot = 270));这里是对每个丝印进行具体处理了,下面就是把丝印放在什么位置呢,;这里的方法是取place_bound_top层的长方形算中心foreach(childid, i ->parent ->childrenwhen(childid ->layer == "PACKAGE GEOMETRY/PLACE_BOUND_TOP" || childid ->layer == "PACKAGE GEOMETRY/PLACE_BOUND_BOTTOM"sym_x = (xCoord(car(childid ->bBox)) + xCoord(cadr(childid ->bBox))) / 2.0sym_y = (yCoord(car(childid ->bBox)) + yCoord(cadr(childid ->bBox))) / 2.0));前面说过丝印的xy并不是字的正中心,所以这里算出偏移量并根据具体;情况加或者减halfT extHeight = axlGetParam(sprintf(nil, "paramTextBlock:%d", 1)) ->height / 2.0case(txt_rot( 0, sym_y = sym_y - halfT extHeight)( 90, sym_x = sym_x + halfT extHeight)(180, sym_y = sym_y + halfTextHeight)(270, sym_x = sym_x - halfTextHeight));这里的xy才是要把丝印最终放置的位置xy = list(sym_x, sym_y);定义要创建文字的属性,字体默认使用1号了,使用者可以根据实际情况修;改合适的字体,然后再使用此脚本textOrientation = make_axlT extOrientation( ?textBlock "1", ?rotation txt_rot, ?mirrored i ->isMirrored, ?justify "CENTER");下面是注释掉的语句,实现的是直接在assemble_top上创建丝印,并删除;掉旧的丝印,实际上就是相当于移动丝印。
Allegro Skill axl函数简介allegro skill简介1. AXL-SKILL专用于allegro的skill被称为AXL-SKILL,只有使用这些专用的函数才可以直接访问allegro 的database。
结合skill语法和这些专用函数可以编写出实现各种功能的命令。
专用于allegro 的skill都是以axl开头,比如axlClearSelSet()。
2. 运行AXL-SKILL在allegro中输入skill就得到了AXL-SKILL的运行环境,在这样的环境中可以直接调用AXL-SKILL命令/函数,另外输入set telskill可以得到一个尺寸大小可调的skill开发窗口。
(万一没有弹出窗口,尝试在allegro菜单里面,选择setup->userprference->skill->telskill----OK)3. AXL-SKILL Databaseallegro中的每个对象object(比如IC元件,net)都有一个对应的dbid(database identifiers),AXL-SKILL操作allegro的也正是这些dbid。
dbid对象:在不同的级别上的dbid是不一样的,比如在Design以及包含的database对象有Property Dictionary,Lines,Text,Polygons,Shapes,Property Definitions,DRCs,Vias that are Padstack object types,Symbols that are Symdef object types,Components,Nets;而在Symbol级别上则是PPins that are Padstack object types,Vias that are Padstack object types,Lines,Arcs,Text,Polygons,Shapes。
算术与逻辑操作符函数名语法对应操作符Data Accessarrayref a[index] [ ]setarray a[index] = exprbitfield1 x<bit> <>setqbitfield1 x<bit>=exprsetqbitfield x<msb:lsb>=exprquote 'expr 'getqq g.s .getq g->s ->putpropqq g.s=expr, g->s=exprputpropq d~>s, d~>s =expr ~>Unarypreincrement ++s ++postincrement s++ ++predecrement --s --postdecrement s-- --minus -n -not !expr !bnot ~x ~Binaryexpt n1 ** n2 **times n1 * n2 * quotient n1 / n2 / plus n1 + n2 + difference n1 - n2 -leftshift x1 << x2 << rightshift x1 >> x2 >> lessp n1<n2 < greaterp n1>n2 > leqp n1<=n2 <= geqp n1>=n2 >= equal g1 == g2 == nequal g1 != g2 != band x1 & x2 & bnand x1 ~& x2 ~& bxor x1 ^ x2 ^ bxnor x1 ~^ x2 ~^ bor x1 | x2 | bnor x1 ~| x2 ~| and x1 && x2 && or x1 || x2 || range g1 : g2 : setq s = expr =对于既有函数名又有操作符函数,采用函数名调用和采用操作符调用的效果是一样的。
SKILL中数据的输出控制1.数据的输出可以使用以下函数print、println、printfprint和println对不同数据类型采用默认显示格式。
print和println采用以下格式显示数据:print直接在之前的数据后面输出,而println在每次输出的最后会加一个换行符。
请看下面例子:for( i 1 3 print( "hello" )) ;Prints hello three times. "hello""hello""hello"for( i 1 3 println( "hello" )) ;Prints hello three times."hello""hello""hello"printf 函数printf函数采用格式输出。
其格式一般为:printf(格式控制,输出表列)比如:printf("\n%-15s %-15s %-10d %-10d %-10d %-10d" layerName purpose rectCount labelCount lineCount miscCount)上面例子中,printf括号中包含两个部分:第一个部分为格式控制,是用双引号括起来的字符串。
其中包含有各个格式说明,由格式说明符号”%”和格式字符组成。
比如上例中的”%d”、”%s”。
一般”%”后面为格式字符。
格式控制中还可包含普通的字符,普通字符不会转换,直接输出。
第二部分为输出表列,输出表列为输出的各个数据,也可以是表达式。
比如下面例子:printf(“a=%d b=%d a+b=%d” a b a+b)当a=2 b=3时,以上printf函数输出为“a= 2 b=3 a+b=5”以下为一些常见的转义字符:%d 整数(十进制)%f 浮点型%s 字符串或symbol%c 字符输出,只输出一个字符%n 数值%L List%P 坐标点%B Bounding Box请参考下面的例子:aList = '(1 2 3)printf( "\nThis is a list: %L" aList ) => tThis is a list: (1 2 3)aList = nilprintf( "\nThis is a list: %L" aList ) => tThis is a list: nil如果printf中数据类型如果与格式说明中的不匹配,那么printf函数将会产生一个错误!比如:printf( "%d %d" 5 nil )Message: *Error* fprintf/sprintf:format spec. incompatible with data –nil上例中,第二个格式说明为输出整数,但是传递的为nil。