當前位置:首頁 » 編程軟體 » tcl語法條件編譯

tcl語法條件編譯

發布時間: 2022-12-13 02:36:51

A. TCL編程的語法規則

TCL的語法規則:

1、解釋器
在Tcl的數據結構中的核心是Tcl_Interp.一個解釋器包含了一套命令,一組變數和一些用於描述狀態的東西。每一個 Tcl命令是 在特定的Tcl_Interp中運行的,基於Tcl的應用程序可以同時擁有幾個Tcl_Interp。Tcl_Interp是一個輕量級的結構,可以快速的新建和刪除。

2、數據類型
Tcl只支持一種數據結構:字元串(string)。所有的命令,命令的所有的參數,命令的結果,所有的變數都是字元串。請牢記這一點,所有的東西都是字元串。這是它比較有特點的方面字元串有三種形式:命令(command),表達式(expresion)和表(list)。

3、Basic Command Syntax 基本語法
Tcl有類似於shell和lisp的語法,當然也有許多的不同。一 條Tcl的命令串包含了一條或多條命令用換行符或分號來隔開,而每一條命令包含了一個域(field)的集合,域使用空白分開的,第一個域是一個命令的名字,其它的是作為參數來傳給它。
例如:
set a 22 //相當於C中的 a=22 a是一個變數這條命令分為三個域:1:set 2:a 3:22 set使用於設置變數的值的命令,a、20 作為參數來傳給它,a使它要操作的變數名,22是要付給的a值。
Tcl的命令名可以是內置的命令也可以是用戶建的新命令,如果是用戶用戶建的新命令應用程序中用函數Tcl_CreateCommand來創建。所有的參數作為字元串來傳遞,命令自己會按其所需來解釋的參數的。命令的名字必須被打全,但 Tcl解釋器找不到一同名的命令時會用 unknown命令來代替。
在很多場合下,unknown 會在庫目錄中搜尋,找到一個的話,會自動生成一個Tcl命令並調用它。unknown經常完成縮略的命令名的執行。但最好不要使用。

4、注釋
和shell很象,第一個字母是"#"的Tcl字元串是注釋。
其他細節規則
Grouping arguments with double-quotes 用雙引號來集群參數,目的在於使用有空白的參數。
例如:
set a "this string contains whitespace"
如果一個參數一雙引號來開始,該參數會一直到下一個雙引號才結束。其中可以有換行符和分號。
Variable substitution with $ 用美元符進行變數替換說白了就是引用該變數。
例如:
set a hello
set b $a // b = "hello" 實際上傳給set命令的參數
//是b,"hello"
set c a // b = "a"
Command substitution with brackets 命令子替換(用方括弧)
例如:
set a [set b "hello"]
實現執行 set b "hello" 並用其結果來替換源命令 中的方括弧部分,產生一條新命令
set a "hello" //"hello" 為 set b "hello" 的返回值
最終的結果是b="hello" a="hello"
當命令的一個子域以方括弧開始以方括弧結束,表示要進行一個命令子替換。並執行該子命令,用其結果來替換原命令中的方括弧部分。方括弧中的部分都被視為Tcl命令。
如下一個復雜一點的例子:
set a xyz[set b "abc"].[set c "def"]
//return xyzabcdef
Backslash substitution 轉移符替換
轉移符時間不可列印字元或由它數意義的字元插入進來。這一概念與C語言中的一樣。
 Backspace (0x8).
f Form feed (0xc).
Newline (0xa).
Carriage-return (0xd).
Tab (0x9).
v Vertical tab (0xb).
{ Left brace (`{").
} Right brace (`}").
[ Open bracket (`[").
] Close bracket (`]").
$ Dollar sign (`$").
sp Space (` "): does not terminate argument.
; Semicolon: does not terminate command.
" Double-quote.
Grouping arguments with braces 用花擴括弧來集群參數
用花擴括弧來集群參數與用雙引號來集群參數的區別在於:用花擴括弧來集群參數其中的三種上述的子替換不被執行。而且可以嵌套。
例如:
set a {xyz a {b c d}}//set收到兩個參數 a "xyz a {b c d}"
eval {
set a 22
set b 33
}//eval收到一個參數 "set a 22
set b 33"

5、命令綜述
1.一個命令就是一個字元串(string)。
2.命令是用換行符或分號來分隔的。
3.一個命令由許多的域組成。第一個於是命令名,其它的域作為參數來傳遞。
4.域通常是有空白(Tab橫向製表健 Space空格)來分開的。
5.雙引號可以使一個參數包括換行符或分號。三種子替換仍然發生。
6.花括弧類似於雙引號,只是不進行三總體換。
7.系統只進行一層子替換,機制替換的結果不會再去做子替換。而且子替換可以在任何一個域進行。
8.如果第一個非控字元是`#",這一行的所有東西都是注釋。

6、表達式
對字元串的一種解釋是表達式。幾個命令將其參數按表達式處理,如:expr、for 和 if,並調用Tcl表達式處理器(Tcl_ExprLong,Tcl_ExprBoolean等)來處理它們。其中的運算符與C語言的很相似。
!
邏輯非
* / % + -
< >>
左移 右移 只能用於整數。
> = == !=
邏輯比較
& ^ |
位運算和 異或 或
&&''
邏輯"和" "或"
x y : z
If-then-else 與C的一樣
Tcl 中的邏輯真為1,邏輯假為0。
一些例子:
5./ 4.0
5./ ( [string length "abcd"] + 0.0 )
計算字元串的長度 轉化為浮點數來計算
"0x03" > "2"
"0y" < "0x12"
都返回 1
set a 1
expr $a+2
expr 1+2
都返回 3

B. 在windows下如何把tcl編譯為tbc文件

段錯誤的出現一般是出現了空指針情況,可能出現的問題是:你在定義變數或者指針的時候沒有初始化,或者你的函數返回值是空值等等,你可以採用gdb調試,可以定位到出錯的地方,進行修改。
這類錯誤是非語法錯誤,因此修正起來比較困難!
希望能幫到你~謝謝採納~~~

C. C語言條件編譯

#ifdef MAIN_REGS
#define _EXTERN //把_EXTERN定義為空,就是_EXTERN啥也不表示
#else
#define _EXTERN extern //把_EXTERN定義為extern
#endif

不定義MAIN_REGS的時候,_EXTERN被定義為關鍵字extern
下面程序就變成
extern volatile struct
{
enum _DispSt State;
u8 Time;}
sDisp;
extern 的定義,extern 表示一個聲明,定義在其他地方
所以編譯器認為你只是在聲明一個變數,如果你沒有額外在其他文件內定義sDisp
肯定是要報錯了
extern的含義請參考http://ke..com/link?url=9EVDWx7LdQeWITokvsRzSCc_ouvquAo-

D. tcl是什麼意思

是TCL集團股份有限公司(簡稱TCL或TCL集團);

TCL集團股份有限公司,創立於1981年,集團現有數萬名員工,二十幾個研發中心,十餘家聯合實驗室及二十幾個製造加工基地,在八十多個國家和地區設有銷售機構,業務遍及全球160多個國家和地區。

TCL的前身是我國首批13家合資企業之一的TTK家庭電器(惠州)有限公司,主要從事錄音磁帶的生產和製造。後來,才逐漸往生產電話、電視、手機、冰箱、洗衣機、空調、小家電、液晶面板等領域轉化。

(4)tcl語法條件編譯擴展閱讀

TCL集團技術創新體系簡介:

TCL 集團是同時擁有電子、移動通訊及8.5 代液晶面板業務的企業,公司通過資源整合,在智能化產品、雲計算和網路化技術應用、操作系統及應用軟體、新型顯示技術等方面均有涉獵;

TCL集團工業研究院直屬於TCL集團總部,既是TCL集團的中央研發部門,也是TCL集團核心技術的孵化基地。

研究院圍繞「3C融合數字家庭系統及基礎軟體平台研發」和「新型顯示技術」兩大戰略方向,在智能終端技術、數字視頻與演算法、基礎軟體技術平台、雲架構與雲計算、創新型產品與服務等方面,都有研究。

2018年,TCL榮獲福布斯2018年全球最佳僱主榜單;

2019年,TCL進入2019年中國500強企業排行榜單中,同時,也在2019年中國戰略性新興產業領軍企業100強榜單中出現。

E. tcl是什麼意思

一、工具命令語言

tcl指工具命令語言(Tool Command Language),是一門有編程特徵的解釋語言,可在 Unix、Windows 和 Apple Macintosh 操作系統上跨平台運行。

二、電器公司

TCL集團股份有限公司,從事錄音磁帶的生產製造,後來拓展到電話、電視、手機、冰箱、洗衣機、空調、小家電、液晶面板等領域。2019年12月18日,人民日報「中國品牌發展指數」100榜單排名第46位。

(5)tcl語法條件編譯擴展閱讀

在工具命令語言中,TCL經常被用於快速原型開發,腳本編程,GUI和測試等方面。TCL念作「踢叩」 tickle。Tcl的特性包括任何東西都是一條命令,包括語法結構(for, if等);任何事物都可以重新定義和重載;所有的數據類型都可以看作字元串。

在電器公司領域,1992年,研製生產TCL王牌大屏幕彩電,投放市場一炮走紅。同時,著手導入CI系統,成為國內較早實施CIS的國有企業之一。1993年,TCL將品牌拓展到電工領域,成立TCL國際電工(惠州)有限公司。

F. tcl 語法基礎

注釋:

puts {Hello, World - In Braces}; # 這種注釋方式才是正確的

puts {Bad comment syntax example}  # *Error* - there is no semicolon!這是一個錯誤,因為tcl的語法規定,命令的參數結束的方式為;或者新的一行

變數:

初始化一個變數用set關鍵字: 

 # set關鍵字可以接受兩個參數:並返回第一參數(也就是變數名)的內容(第二個參數)

#set關鍵字也可以接受一個參數,如果只接受一個參數的時候返回這個變數的內容

set  x  10  # 定義變數x的值為10

set  y  x+100  # 定義變數y的值為 x+100  這里會把x+100 看成整體的一個字元串,這里可以看出tcl默認都認為是字元串來出來

set  y  $x+100  # 定義變數y的值為 10+100 ,這里$符號告訴解釋器x是一個變數而不是字元串

set  y [expr  $x+100]  # 定義變數y的值為110,當tcl解釋器遇到[] 的時候會去執行裡面的內容並返回結果。

set  y  "$x   ddd" # 這里雙引號的作用是允許這個字元串中有空格

set   y    {$x 10}   # 這里的x不會被解釋,所以{}的作用是,直接定義 一整串字元串

puts:轉義符

set Z Albany

set Z_LABEL "The Capitol of New York is: "

puts "$Z_LABEL $Z"  ;# Prints the value of Z

puts "$Z_LABEL \$Z"  ;# Prints a literal $Z instead of the value of Z

puts "\nBen Franklin is on the \$100.00 bill"

set a 100.00

puts "Washington is not on the $a bill"    ;# This is not what you want

puts "Lincoln is not on the $$a bill"      ;# This is OK

puts "Hamilton is not on the \$a bill"    ;# This is not what you want

puts "Ben Franklin is on the \$$a bill"    ;# But, this is OK

puts "\n................. examples of escape strings"

puts "Tab\tTab\tTab"

puts "This string prints out \non two lines"

puts "This string comes out\

on a single line"

數組:

set a [list 1 2 3 4]    # 初始化一個列表

lappend a 5 # 追加一個變數,注意這里的列表a沒有加$ 

lindex $a 1 # 獲取列表第二值,這里加上了$

llength $a  # 返回列表的長度

lrange $a 0 2 # 返回前三個數這里取到了第三個值

字元串格式化:

set name john

set age 20

set msg [format "%s is %d years old" $name $age] # 格式化

puts $msg

G. 有關Tcl腳本語言編程的問題

set srcfile myres.res
set dstfile dtest.txt
if {[catch {open $srcfile r} res]} {
puts "Failed to open the source file: $srcfile; $res"
return 0
}
set hSrc $res
if {[catch {open $dstfile w+} res]} {
puts "Failed to open the destination file: $dstfile; $res"
return 0
}
set hDst $res
foreach line [split [read $hSrc] \n] {
if {[regexp {rdly=(.*)targ=(.*)trig=(.*)} $line match sub1]} {
puts $hDst "Rise Delay is $sub1"
}
if {[regexp {fdly=(.*)targ=(.*)trig=(.*)} $line match sub1]} {
puts $hDst "Fall Delay is $sub1"
}
}
close $hSrc
close $hDst

熱點內容
微博資料庫設計 發布:2025-07-05 15:30:55 瀏覽:13
linux485 發布:2025-07-05 14:38:28 瀏覽:294
php用的軟體 發布:2025-07-05 14:06:22 瀏覽:745
沒有許可權訪問計算機 發布:2025-07-05 13:29:11 瀏覽:418
javaweb開發教程視頻教程 發布:2025-07-05 13:24:41 瀏覽:667
康師傅控流腳本破解 發布:2025-07-05 13:17:27 瀏覽:227
java的開發流程 發布:2025-07-05 12:45:11 瀏覽:669
怎麼看內存卡配置 發布:2025-07-05 12:29:19 瀏覽:271
訪問學者英文個人簡歷 發布:2025-07-05 12:29:17 瀏覽:821
1970linux 發布:2025-07-05 12:12:43 瀏覽:109