在TCL中,是否有一个优雅的实现可以模仿经常在编程语言中使用的ifdef。从TCL脚本语言本身来说,我找不到TCL解释器本地支持的方式。ifdef等效于TCL
0
A
回答
5
除了标准的“if”语句外,没有内置于Tcl的内容等同于“ifdef”。如果你不喜欢标准的“if”语句,tcl给你所有的基本构建块来创建你自己的“ifdef”命令。
例如,ifdef实际上只不过是查找定义值的if语句而已。一个非常简单的实现可能是这个样子:
proc define {name value} {
set ::defined($name) $value
}
proc ifdef {name script1 else script2} {
if {[info exists ::defined($name)]} {
uplevel $script1
} else {
uplevel $script2
}
}
然后,您可以使用这样的:
define FOO 1
...
ifdef FOO {
<do this if FOO is defined>
} else {
<do this if FOO is NOT defined>
}
4
如果你尝试检查一个环境现状变量,你可以这样做:
if {[info exists ::env(PROJ_FOO)]} {
set_lib x
} else {
set_lib y
}
假设你有一些Tcl命令叫set_lib
。
+0
set_lib是一个特定于工具的命令。看起来唯一的办法就是设置一个ENV变量,就像在SHELL编程语言中一样。我在想是否有任何命令行选项来选择性地运行代码。 tcl -f foo.tcl -define PROJ_FOO(避免设置ENV变量) – Mike 2014-11-25 23:45:46
0
看看[信息存在的varName]和类似。例如:
如果{[信息存在myVar的]!} {放“myVar的是未定义所以在这里把它定义”}
多一点打字,但很明显发生了什么事,可以用在任何信息可以检查。
相关问题
- 1. 在VBA中的IFDEF等效
- 2. Tcl等效于UNIX“cp -pL”命令
- 3. protobuf中#ifdef语法的等效代码
- 4. 等效于WM_MOVE
- 5. Tiff等效于UIImage.AsPNG()
- 6. IsNan等效于C
- 7. fgets等效于C++
- 8. // @ sourceURL等效于CSS
- 9. __LINE__等效于Javascript
- 10. FileMakerPro等效于Linux?
- 11. ShellExecute等效于.NET
- 12. 等效于libmysqldev FreeBSD
- 13. DataInputStream.skip等效于C#
- 14. curl等效于C#
- 15. JRE等效于Python
- 16. .BAT等效于MAC
- 17. ob_get_contents等效于asp
- 18. Response.Redirect等效于C#
- 19. char.IsLetterOrDigit等效于php
- 20. Exceldna等效于Java
- 21. cout.precision()等效于python
- 22. 等效于OpenSSL的
- 23. Android等效于JTextArea
- 24. powershell等效于SIGHUP
- 25. Winsock.SendData等效于Javascript?
- 26. Url.Content()等效于php?
- 27. HTTPLiveHeaders等效于IE?
- 28. jQuery.getJSON等效于MooTools
- 29. phpmyadmin等效于IOS?
- 30. 等效于Java的
不,你想做什么? – Kevin 2014-11-24 22:34:33
基于一个特定的项目,我可能需要将命令更改为支持TCL语言芯片设计的工具。例如,'ifdef PROJ_FOO set_lib x'else set_lib y'endif - 这是意图 – Mike 2014-11-24 22:44:32
http://www.gnu.org/software/m4/ – Kevin 2014-11-24 22:46:39