两万字的CAPL语法基础,一篇文章带你入门
- 🍅 我是螞蟻小兵,專注于車載診斷領(lǐng)域,尤其擅長(zhǎng)于對(duì)CANoe工具的使用
- 🍅 尋找組織 ,答疑解惑,摸魚聊天,博客源碼,點(diǎn)擊加入👉【相親相愛一家人】
- 🍅 玩轉(zhuǎn)CANoe,博客目錄大全,點(diǎn)擊跳轉(zhuǎn)👉
📘前言
-
🍅 本章內(nèi)容,面向CAPL初學(xué)者,超過兩萬字,超全超詳細(xì)。
-
🍅 本節(jié)內(nèi)容大量引用,翻譯下面的Vector 官方文檔:capl_programming ,資料我放在下方公眾號(hào)網(wǎng)盤了,有需自取!
目錄
- 📘前言
- 📙1 CAPL 簡(jiǎn)介
- 📙2 CAPL 語法基礎(chǔ)
- 🍅2.1 CAPL和C語言的主要不同點(diǎn)
- 🍅2.1 CAPL和C語言中等價(jià)的函數(shù)
- 🍅2.2 注釋
- 🍅2.3 變量的命名規(guī)范
- 🍅2.4 區(qū)分大小寫
- 🍅2.5 CAPL 關(guān)鍵字
- 🍅2.6 CAPL 支持的數(shù)據(jù)類型
- 🍅2.7 變量聲明
- 🍅2.8 數(shù)據(jù)類型轉(zhuǎn)換
- 🍅2.9 常量
- 整形
- 浮點(diǎn)數(shù)
- 字符
- 字符串
- 宏定義
- 🍅 2.10 數(shù)組
- 🍅 2.11 枚舉類型
- 🍅 2.12 結(jié)構(gòu)體數(shù)據(jù)類型
- 🍅 2.13 message
- 🍅 2.14 定時(shí)器
- 🍅 2.15 運(yùn)算符
- 2.15.1 算數(shù)運(yùn)算
- 2.15.2 賦值運(yùn)算符
- 2.15.3 布爾運(yùn)算符
- 2.15.4 比較運(yùn)算符
- 2.15.5 位運(yùn)算符
- 2.15.6 三目運(yùn)算符
- 2.15.7 其它運(yùn)算符
- 2.15.8 不支持運(yùn)算符
- 2.15.9 運(yùn)算符優(yōu)先級(jí)
- 🍅 2.16 控制語句
- 2.16.1 if 語句
- 2.16.2 if else 語句
- 2.16.3 Switch 語句
- 2.16.4 While 循環(huán)語句
- 2.16.5 do...while 循環(huán)語句
- 2.16.6 for 循環(huán)語句
- 2.16.7 break 語句
- 2.16.8 continue 語句
- 2.16.9 return 語句
- 🍅 2.17 函數(shù)
- 🌎總結(jié)
📙1 CAPL 簡(jiǎn)介
-
CAPL(發(fā)音為“kapple”),是 Communication Access Programming Language 的縮寫。CAPL是基于C語言開發(fā)的,專門用于CANalyzer和CANoe工具環(huán)境,但是CAPL簡(jiǎn)化了C語言,移除了復(fù)雜的指針概念,和一些不常用的關(guān)鍵字等,也融入了一些C++的概念,比如函數(shù)重載等。就學(xué)習(xí)難度而言 CAPL < C< C++。
-
CANalyzer或CANoe工具本身無需CAPL程序,就足以執(zhí)行簡(jiǎn)單的測(cè)量和分析。采用CAPL程序,大大擴(kuò)展了CAN通信的測(cè)量和分析。
如果沒有CAPL,該工具無法執(zhí)行的是涉及計(jì)時(shí)的分析。CAPL可以使分析更加高效 -
CAPL 腳本是基于事件驅(qū)動(dòng)的,和常規(guī)語言不同,CAPL沒有 main()函數(shù),沒有程序入口,任何事件都有可能觸發(fā)CAPL腳本的執(zhí)行,比如,按鍵事件,定時(shí)器事件,執(zhí)行測(cè)試等;如果沒有事件發(fā)生,那么CAPL程序是“閑置的”。
-
任何語言都需要編譯之后才能運(yùn)行,我們編寫CAPL 的IDE叫做 CAPL Browser ,是CNAoe 整個(gè)開發(fā)環(huán)境的一部分組件;因?yàn)镃APL Browser的整體結(jié)構(gòu)基于事件的概念,并且是專門組織的圍繞不同的事件類,軟件開發(fā)過程比傳統(tǒng)的組織要簡(jiǎn)單得多C程序。關(guān)于CAPL的事件結(jié)構(gòu)更詳細(xì)的解讀,參考后面章節(jié)博客內(nèi)容。
📙2 CAPL 語法基礎(chǔ)
🍅2.1 CAPL和C語言的主要不同點(diǎn)
- 下圖可以看出,C語言支持很多概念,CAPL都舍棄掉了,或者只取其一小部分支持,讓CAPL語言更加簡(jiǎn)便和易懂
- 比如CAPL是基礎(chǔ)事件驅(qū)動(dòng)的,所以不需要main()函數(shù)入口
- 持指針操作,宏定義,頭文件都不在支持
- 下圖有點(diǎn)老,博主基于CANoe 11版本,枚舉和結(jié)構(gòu)體類型都是支持的。
- 在c語言中,使用函數(shù)之前,必須要進(jìn)行聲明,而CAPL是不需要的。
Note:
1,在CAPL中,默認(rèn)所有的局部變量都是靜態(tài)的,在C語言中,需要用關(guān)鍵字static 修飾的變量才是靜態(tài)的。這一點(diǎn)新手在寫腳本要特別注意 點(diǎn)擊,了解 CAPL腳本中關(guān)于 局部變量 容易忽略的一點(diǎn)
2,void 在CAPL中只支持函數(shù)返回值類型,表示函數(shù)沒有返回值
3,CAPL中使用了一些標(biāo)準(zhǔn)的C函數(shù)。這些函數(shù)通常是數(shù)學(xué)函數(shù)或字符串函數(shù)(例如,abs(),strncpy())已經(jīng)在CAPL內(nèi)部預(yù)定義了。
4,CAPL沒有完整的ANSI C標(biāo)準(zhǔn)庫(kù),但它有CAPL特有的庫(kù),稱為CAPL dll。dll編程需要有一定的編程經(jīng)驗(yàn)
5,字符串?dāng)?shù)據(jù)類型在CAPL中不支持;但是,您可以使用字符數(shù)組(例如,char temp[6]= " Hello "😉。
🍅2.1 CAPL和C語言中等價(jià)的函數(shù)
- 對(duì)于C程序員來說,了解一些等價(jià)的函數(shù)是很有幫助的。下面是一個(gè)類似的簡(jiǎn)明列表函數(shù),但有關(guān)CAPL函數(shù)如何使用的更多詳細(xì)信息,請(qǐng)參閱CAPL函數(shù)參考手冊(cè)。
🍅2.2 注釋
- CAPL 的注釋方式和大多數(shù)語言都一樣,都是通過 // 或者 /**/ 來實(shí)現(xiàn)的,下面四種注釋方法都是合法的。
- CAPL Brower中注釋代碼的默認(rèn)快捷鍵 選中你要注釋的代碼,先按住組合鍵 Ctrl + K ,然后在按組合鍵Ctrl +C ; 解除注釋是 先按住組合鍵 Ctrl + K ,然后在按組合鍵Ctrl +U ;
🍅2.3 變量的命名規(guī)范
-
變量名、函數(shù)名和數(shù)組名可以由字母和數(shù)字和下劃線組成,但是首字母不能是數(shù)字
-
下面的命名都是合法的:
sum
number_of_units
J5x7
_sysflag -
下面的命名都是不合法的:
int // because it is a reserved keyword
sum$value // the $ is not a recognized character
3Times // because a variable name cannot begin with a number
number of units // because spaces are not allowed
🍅2.4 區(qū)分大小寫
-
在使用CAPL編寫時(shí),一定要記住,對(duì)于用戶定義的變量,小寫字母和大寫字母是不同的變量
-
下面三個(gè)變量是三個(gè)不同的變量
input_1
Input_1
INPUT_1 -
但是CAPL支持的關(guān)鍵字是不區(qū)分大小寫的,比如 INT a; 和int a;是一樣的。
🍅2.5 CAPL 關(guān)鍵字
- 關(guān)鍵字不能用來命名變量或函數(shù)。CAPL使用C編程中保留的關(guān)鍵字語言。但是,CAPL不支持一些常見的C關(guān)鍵字。
下面是保留關(guān)鍵字的列表,包括CAPL支持的和不支持的關(guān)鍵字 - 本圖較老,emum和struct現(xiàn)在是支持的。
🍅2.6 CAPL 支持的數(shù)據(jù)類型
- 下表列出了支持的部分?jǐn)?shù)據(jù)類型,不全,不過足以介紹CAPL支持的基本數(shù)據(jù)類型,以及所占的字節(jié)數(shù),還有是是有符號(hào)數(shù)等等。message 和timer等是CAPL獨(dú)有的數(shù)據(jù)類型,這里不描述
🍅2.7 變量聲明
- CAPL 變量有局部變量和全局變量,在CAPL 中Variables中定義的是全局變量
- 數(shù)據(jù)類型float和double都是占8個(gè)字節(jié),它們指定符合IEEE的64位浮點(diǎn)數(shù)標(biāo)準(zhǔn),它們彼此兼容。
- 變量的初始化在聲明期間是可選的,定義的時(shí)候如果沒有初始化,
整形數(shù)據(jù)則默認(rèn)是0;
char 型默認(rèn)是null ;
message 類型默認(rèn)的數(shù)據(jù)段是0;
定時(shí)器timer ,不需要初始化 - 下面的變量聲明是合法的
🍅2.8 數(shù)據(jù)類型轉(zhuǎn)換
- CAPL支持類型轉(zhuǎn)換,隱形和顯性都可以
-下面 第一個(gè)賦值語句使用隱形轉(zhuǎn)換,即將1.6和1.7添加到結(jié)果3.3,但是sum是整形,所以自動(dòng)截?cái)?#xff0c;結(jié)果就是3
-下面 第二個(gè)賦值語句使用顯性轉(zhuǎn)換,即1+1 =2 ,最后結(jié)果就是2
🍅2.9 常量
- 初始化一個(gè)變量意味著給它賦一個(gè)初始值或開始值。在CAPL中,這可以在同一行中完成變量聲明。當(dāng)值在聲明期間賦值時(shí),它們被視為常量
整形
- 整形可以是十進(jìn)制和十六進(jìn)制
浮點(diǎn)數(shù)
- 浮點(diǎn)數(shù)可以是十進(jìn)制數(shù),或者科學(xué)計(jì)數(shù)法,以下都是合法的
字符
- 字符常量 是用單引號(hào),括起來的一個(gè)字符
- CAPL支持使用ASCII字符集。上面的三個(gè)字符賦值可以用十六進(jìn)制分別
字符串
- 字符串常量由一系列由雙引號(hào)括起來的一個(gè)或多個(gè)連續(xù)字符組成。
- 字符串存儲(chǔ)在char類型的數(shù)據(jù)元素?cái)?shù)組中。最后一個(gè)元素包含空字符\0,即用于指示字符串的結(jié)束。
- 要確保字符串?dāng)?shù)組定義時(shí)的大小總是字符串長(zhǎng)度 + 1,因?yàn)榻Y(jié)束符\0也占用一個(gè)字符
- 如果已經(jīng)定義過了一個(gè)字符串?dāng)?shù)組,不可以直接給它賦值的,下面代碼時(shí)不允許的
- 可行的一種方法,是通過CAPL自帶的字符串操作函數(shù)實(shí)現(xiàn)
宏定義
- 在C語言中,下面代碼是合法的,但是在CAPL中是不可以的。
🍅 2.10 數(shù)組
-
數(shù)組時(shí)同一種數(shù)據(jù)類型的集合,元素必須小于等于指定的大小
-
下面時(shí)26個(gè)字母,但是我們必須定義27個(gè)大小,因?yàn)閿?shù)據(jù)類型時(shí)char , 結(jié)束符\0要占一個(gè)字節(jié)
char alphabet[27] = “ABCDEFGHIJKLMNOPQRSTUVWXYZ”;
我們通過下表索引可以獲取數(shù)組中的數(shù)值,比如 alphabet[0] 就是 ‘A’ -
整形或者浮點(diǎn)型數(shù)組,大小可以和聲明的元素?cái)?shù)量一致,比如
int sample_data[4] = { 100, 300, 500, 600 }; -
如果,定義時(shí),數(shù)組沒有完全舒適化,其余的用默認(rèn)值0填充
int sample_data[10] = { 100, 300, 500, 600 }; -
也可以定義二維數(shù)組
int M[4][5] = {
{ 10, 5, -3, 17, 82 },
{ 9, 0, 0, 8, -7 },
{ 32, 20, 1, 0, 14 },
{ 0, 0, 8, 7, 6 }
}; -
要確定數(shù)組中元素的數(shù)量,可以使用elCount()函數(shù),如下面的例子所示:
nt i, j;
for ( j = 0; j < elCount(array); j++ )
for ( i = 0; i <= elCount(array[j]); i++ )
. . .
🍅 2.11 枚舉類型
- 枚舉類型在CAPL中定義的方式與在C中完全相同
- 定義完成后,可以直接使用enum的成員變量
- 當(dāng)對(duì)枚舉類型初始化變量后,有兩種方法給枚舉變量賦值,如下腳本
- 可以通過 enum.Name() 可以獲取變量當(dāng)前值對(duì)應(yīng)的元素名字
🍅 2.12 結(jié)構(gòu)體數(shù)據(jù)類型
- 結(jié)構(gòu)體在CAPL中定義的方式與在C中完全相同
- -定義結(jié)構(gòu)體變量時(shí),完成初始化
- 定義結(jié)構(gòu)體變量時(shí),沒有初始化,后面再賦值
🍅 2.13 message
- message 是CAPL獨(dú)有的數(shù)據(jù)類型,可以用來仿真,改寫,創(chuàng)建報(bào)文等,是CANoe 仿真測(cè)試的比較核心內(nèi)容
- message ,有豐富的屬性和相關(guān)方法,詳情需要參考help文檔了,不做深入探討
- 一下代碼將向總線上發(fā)送一幀ID = 100 的報(bào)文
🍅 2.14 定時(shí)器
- 由于CAPL被設(shè)計(jì)為提供事件驅(qū)動(dòng)的環(huán)境,計(jì)時(shí)器提供了一種簡(jiǎn)單的觸發(fā)周期性的方法事件。CAPL允許設(shè)置無限多個(gè)用戶定義的計(jì)時(shí)器。
- CAPL 提供兩種定時(shí)器: 毫秒計(jì)時(shí)器(msTimer) 和 秒計(jì)時(shí)器(timer),必須再全局變量中定義定時(shí)器
-
使用一個(gè)定時(shí)器分一下三個(gè)步驟:
- 聲明一個(gè)計(jì)時(shí)器變量
- 在事件過程(preStart 除外)或用戶定義的函數(shù)中預(yù)先設(shè)置計(jì)時(shí)器
- 為該計(jì)時(shí)器定義一個(gè)on timer 事件
-
下面代碼,是一個(gè)簡(jiǎn)單但是完整的毫秒定時(shí)器的使用方法,目的是案件‘a(chǎn)’觸發(fā)后,開啟定時(shí)器,20ms后發(fā)送 ID =100的報(bào)文
- 周期定時(shí)器:下面代碼周期為100ms的發(fā)送ID=0x555的報(bào)文
- 如果定時(shí)器還沒被觸發(fā),你可以通過setTimer() 函數(shù),重置該定時(shí)器
- 如果定時(shí)器還沒被觸發(fā),你也可以通過cancelTimer() 函數(shù)來取消該定時(shí)器
🍅 2.15 運(yùn)算符
- CAPL的運(yùn)算符大多數(shù)和C都一樣,也進(jìn)行了一些刪減
- CAPL的運(yùn)算符包括下面幾大類
算數(shù)運(yùn)算
賦值運(yùn)算
關(guān)系運(yùn)算
布爾運(yùn)算
位運(yùn)算
混合運(yùn)算
2.15.1 算數(shù)運(yùn)算
-
下圖是CAPL支持的算數(shù)運(yùn)算符,包括加減乘除,取模等,完全和C語言一樣
-
下面一些算數(shù)運(yùn)算符的使用
2.15.2 賦值運(yùn)算符
- 下圖是CAPL支持的賦值運(yùn)算符,完全和C語言一樣。
- 下面一些賦值運(yùn)算符的簡(jiǎn)單使用
2.15.3 布爾運(yùn)算符
- 下圖是CAPL支持的布爾運(yùn)算符,完全和C語言一樣。
- 下面一些布爾運(yùn)算符的簡(jiǎn)單使用
2.15.4 比較運(yùn)算符
-
下圖是CAPL支持的比較運(yùn)算符,完全和C語言一樣。
-
下面一些比較運(yùn)算符的簡(jiǎn)單使用
2.15.5 位運(yùn)算符
- 下圖是CAPL支持的位運(yùn)算符,完全和C語言一樣。
- 下面一些位運(yùn)算符的簡(jiǎn)單使用
2.15.6 三目運(yùn)算符
- 下圖是CAPL支持的三目運(yùn)算符,完全和C語言一樣。
- 返回值:先求表達(dá)式 1 的值,如果為真,則執(zhí)行表達(dá)式 2,并返回表達(dá)式 2 的結(jié)果;如果表達(dá)式 1 的值為假,則執(zhí)行表達(dá)式 3,并返回表達(dá)式 3 的結(jié)果
2.15.7 其它運(yùn)算符
- 下圖是CAPL支持的運(yùn)算符,[]可以用來數(shù)組索引取值, 點(diǎn) 表示結(jié)構(gòu)體的成員,這在CAPL語言中很常見,不止用于結(jié)構(gòu)體的成員變量,很多Object都有成員
- 比如message數(shù)據(jù)類型
2.15.8 不支持運(yùn)算符
- 下圖是CAPL支持的運(yùn)算符,& 在CAPL中局部支持,可以用來地址傳參,比如 void function(int & dl),可以在函數(shù)內(nèi)部改變傳入的變量
2.15.9 運(yùn)算符優(yōu)先級(jí)
- 下圖是我在網(wǎng)上找的C語言的運(yùn)算符優(yōu)先級(jí),因?yàn)镃APL語言基于C,大部分都適用。
- 沒有必要去記哈,貼出來給個(gè)參考。如果代碼需要復(fù)合運(yùn)算的時(shí)候,都加上括號(hào),既方便閱讀代碼,也不用擔(dān)心優(yōu)先級(jí)的問題。
🍅 2.16 控制語句
- CAPL支持的控制語句和C語言中一樣,包括 if else ,do ,while ,for 等
2.16.1 if 語句
if (expression) statement;
- if 括號(hào)內(nèi)的表達(dá)式為真,或者非0,則執(zhí)行if 下面的語句
- 如果沒有花括號(hào),則只執(zhí)行if下面的第一行語句
- 如果有花括號(hào),執(zhí)行if下面花括號(hào)的所有語句
2.16.2 if else 語句
-
如果下面表達(dá)式為真或者非0,則執(zhí)行語句塊1,否則執(zhí)行語句塊2
if (expression) statement_1
else statement_2 -
if else 的典型用法
2.16.3 Switch 語句
- 下面是switch 語句的偽代碼表示:
- switch (expression) 中的 expression應(yīng)該是個(gè) 整形變量或者字符變量或者枚舉類型變量
- case value1: 每個(gè)case分支中的value應(yīng)該是個(gè) 整形或者字符常量,注意case value后面有個(gè)冒號(hào)
- default ,當(dāng)所有分支都不能匹配的時(shí)候,會(huì)執(zhí)行default內(nèi)的代碼
- 當(dāng)遇到 break 語句時(shí),switch 終止,控制流將跳轉(zhuǎn)到 switch 語句后的下一行。
- 不是每一個(gè) case 都需要包含 break。如果 case 語句不包含 break,控制流將會(huì) 繼續(xù) 后續(xù)的 case,直到遇到 break 為止。
2.16.4 While 循環(huán)語句
- Capl 語言中 while 循環(huán)的語法:
- 在這里,statement(s) 可以是一個(gè)單獨(dú)的語句,也可以是幾個(gè)語句組成的代碼塊。
- condition 可以是任意的表達(dá)式,當(dāng)為任意非零值時(shí)都為 true。當(dāng)條件為 true 時(shí)執(zhí)行循環(huán)。 當(dāng)條件為 false 時(shí),退出循環(huán).
2.16.5 do…while 循環(huán)語句
- Capl 語言中 do…while 循環(huán)的語法:
- 在這里,statement(s) 可以是一個(gè)單獨(dú)的語句,也可以是幾個(gè)語句組成的代碼塊。
- condition 可以是任意的表達(dá)式,當(dāng)為任意非零值時(shí)都為 true。當(dāng)條件為 true 時(shí)執(zhí)行循環(huán)。 當(dāng)條件為 false 時(shí),退出循環(huán).
- 不像 for 和 while 循環(huán),它們是在循環(huán)頭部測(cè)試循環(huán)條件。在 C 語言中,do…while 循環(huán)是在循環(huán)的尾部檢查它的條件。
- do…while 循環(huán)與 while 循環(huán)類似,但是 do…while 循環(huán)會(huì)確保至少執(zhí)行一次循環(huán)。
- 還要注意while 表達(dá)式最后是分號(hào)結(jié)尾的
2.16.6 for 循環(huán)語句
- Capl 語言中 for 循環(huán)的語法:
-
下面是 for 循環(huán)的控制流:
1,init 會(huì)首先被執(zhí)行,且只會(huì)執(zhí)行一次。您也可以不在這里寫任何語句,只要有一個(gè)分號(hào)出現(xiàn)即可。CAPL語句不允許在這個(gè)位置定義新的變量,而C語言是可以的
2,接下來,會(huì)判斷 condition。如果為真,則執(zhí)行循環(huán)主體。如果為假,則不執(zhí)行循環(huán)主體,且控制流會(huì)跳轉(zhuǎn)到緊接著 for 循環(huán)的下一條語句。切記不要讓condition永遠(yuǎn)為真,否則會(huì)是個(gè)死循環(huán)的
3,在執(zhí)行完 for 循環(huán)主體后,控制流會(huì)跳回上面的 increment 語句。該語句允許您更新循環(huán)控制變量。該語句可以留空,只要在條件后有一個(gè)分號(hào)出現(xiàn)即可。
4,條件再次被判斷。如果為真,則執(zhí)行循環(huán),這個(gè)過程會(huì)不斷重復(fù)(循環(huán)主體,然后增加步值,再然后重新判斷條件)。在條件變?yōu)榧贂r(shí),for 循環(huán)終止。 -
下面三個(gè)代碼都是可以的
2.16.7 break 語句
-
Capl 語言中 break 語句有以下兩種用法:
當(dāng) break 語句出現(xiàn)在一個(gè)循環(huán)內(nèi)時(shí),循環(huán)會(huì)立即終止,且程序流將繼續(xù)執(zhí)行緊接著循環(huán)的下一條語句。
它可用于終止 switch 語句中的一個(gè) case。 -
如果您使用的是嵌套循環(huán)(即一個(gè)循環(huán)內(nèi)嵌套另一個(gè)循環(huán)),break 語句會(huì)停止執(zhí)行最內(nèi)層的循環(huán),然后開始執(zhí)行該塊之后的下一行代碼。
-
下圖是break語句在循環(huán)語句中的使用,和退出循環(huán)的過程
2.16.8 continue 語句
-
continue 語句有點(diǎn)像 break 語句。但它不是強(qiáng)制終止,continue 會(huì)跳過當(dāng)前循環(huán)中的代碼,強(qiáng)迫開始下一次循環(huán)。
-
對(duì)于 for 循環(huán),continue 語句執(zhí)行后自增語句仍然會(huì)執(zhí)行。對(duì)于 while 和 do…while 循環(huán),continue 語句重新執(zhí)行條件判斷語句
-
-下圖是continue 語句在循環(huán)語句中的使用
2.16.9 return 語句
- CAPL腳本中,不帶參數(shù)的return也可以退出循環(huán)語句
- 但是更多的使用return,是用來在函數(shù)中,返回一個(gè)值或者值的表達(dá)式
- 注意:CAPL中所有的事件處理都不返回值
🍅 2.17 函數(shù)
1, CAPL語言,選用了C語言庫(kù)的少部分函數(shù),但是CANoe有它自己的大量的函數(shù)庫(kù),這些函數(shù)都是專用于CANalyzer或CANoe編程環(huán)境中有用的各種專用操作。
2,CAPL的函數(shù)大致分為3類:
- 自定義的函數(shù);不用任何聲明,在CAPL文件任意位置都可以
- CAPL內(nèi)置的函數(shù);不用像C語言那樣的要引用 #include <stdio.h>等等各種庫(kù),已經(jīng)被內(nèi)置在CAPL中,隨用隨調(diào)
- DLL: 考慮到CAPL內(nèi)置庫(kù)不夠用,CAPL對(duì)動(dòng)態(tài)庫(kù)有很好的支持
3, 這里CAPL引入了C++的函數(shù)重載的思想,我們可以定義相同的函數(shù)名,但是要保持參數(shù)不同。
on key 'c' {printme(5.7);printme(3, "Feet"); }void printme (double num) { write("Floating point %f", num); } void printme (int num, char units[]) { write("%d %s", num, units); }4 ,CAPL為其內(nèi)置函數(shù)使用一致且易于閱讀的命名約定:
- 所有標(biāo)準(zhǔn)C函數(shù)都是小寫的(例如,sin(), cos(), strlen(), strncat())
- 非標(biāo)準(zhǔn)C函數(shù),且只有1個(gè)單詞的函數(shù)都是用小寫(例如,trigger(), outport(), inport())
- 非標(biāo)準(zhǔn)C函數(shù),但是超過1個(gè)單詞的,除第一個(gè)單詞,其余的首字母都大寫(例如,swapInt(), timeDiff(), putValueToControl())
5, 雖然函數(shù)名是不區(qū)分大小的,但是為了保持CAPL統(tǒng)一的編碼規(guī)則和可讀性,建議你依據(jù)上面的規(guī)則
🌎總結(jié)
- 🚩要有最樸素的生活,最遙遠(yuǎn)的夢(mèng)想,即使明天天寒地凍,路遙馬亡!
- 🚩如果這篇博客對(duì)你有幫助,請(qǐng) “點(diǎn)贊” “評(píng)論”“收藏”一鍵三連 哦!碼字不易,大家的支持就是我堅(jiān)持下去的動(dòng)力。
總結(jié)
以上是生活随笔為你收集整理的两万字的CAPL语法基础,一篇文章带你入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 河北联通烽火HG680-J机顶盒破解安装
- 下一篇: 一行代码完成模型训练,30倍加速,3毫秒