一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言要如何面向?qū)ο缶幊?

Q4MP_gh_c472c21 ? 來(lái)源:IoT物聯(lián)網(wǎng)小鎮(zhèn) ? 作者:道哥 ? 2021-01-26 09:58 ? 次閱讀

一、前言

嵌入式開發(fā)中,C/C++語(yǔ)言是使用最普及的,在C++11版本之前,它們的語(yǔ)法是比較相似的,只不過(guò)C++提供了面向?qū)ο蟮?a href="http://www.www27dydycom.cn/v/tag/1315/" target="_blank">編程方式。

雖然C++語(yǔ)言是從C語(yǔ)言發(fā)展而來(lái)的,但是今天的C++已經(jīng)不是當(dāng)年的C語(yǔ)言的擴(kuò)展了,從2011版本開始,更像是一門全新的語(yǔ)言。

那么沒(méi)有想過(guò),當(dāng)初為什么要擴(kuò)展出C++?C語(yǔ)言有什么樣的缺點(diǎn)導(dǎo)致C++的產(chǎn)生?

2baa71cc-5f63-11eb-8b86-12bb97331649.png

C++在這幾個(gè)問(wèn)題上的解決的確很好,但是隨著語(yǔ)言標(biāo)準(zhǔn)的逐步擴(kuò)充,C++語(yǔ)言的學(xué)習(xí)難度也逐漸加大。沒(méi)有開發(fā)過(guò)幾個(gè)項(xiàng)目,都不好意思說(shuō)自己學(xué)會(huì)了C++,那些左值、右值、模板、模板參數(shù)、可變模板參數(shù)等等一堆的概念,真的不是使用2,3年就可以熟練掌握的。

但是,C語(yǔ)言也有很多的優(yōu)點(diǎn):

2bd20d40-5f63-11eb-8b86-12bb97331649.png

其實(shí)最后一個(gè)優(yōu)點(diǎn)是最重要的:使用的人越多,生命力就越強(qiáng)。就像現(xiàn)在的社會(huì)一樣,不是優(yōu)者生存,而是適者生存。

這篇文章,我們就來(lái)聊聊如何在C語(yǔ)言中利用面向?qū)ο蟮乃枷雭?lái)編程。也許你在項(xiàng)目中用不到,但是也強(qiáng)烈建議你看一下,因?yàn)槲抑霸谔鄣臅r(shí)候就兩次被問(wèn)到這個(gè)問(wèn)題。

二、什么是面向?qū)ο缶幊?/p>

有這么一個(gè)公式:程序=數(shù)據(jù)結(jié)構(gòu)+算法

C語(yǔ)言中一般使用面向過(guò)程編程,就是分析出解決問(wèn)題所需要的步驟,然后用函數(shù)把這些步驟一步一步調(diào)用,在函數(shù)中對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行處理(執(zhí)行算法),也就是說(shuō)數(shù)據(jù)結(jié)構(gòu)和算法是分開的。

C++語(yǔ)言把數(shù)據(jù)和算法封裝在一起,形成一個(gè)整體,無(wú)論是對(duì)它的屬性進(jìn)行操作、還是對(duì)它的行為進(jìn)行調(diào)用,都是通過(guò)一個(gè)對(duì)象來(lái)執(zhí)行,這就是面向?qū)ο缶幊趟枷搿?/p>

如果用C語(yǔ)言來(lái)模擬這樣的編程方式,需要解決3個(gè)問(wèn)題:

數(shù)據(jù)的封裝

繼承

多態(tài)

第一個(gè)問(wèn)題:封裝

封裝描述的是數(shù)據(jù)的組織形式,就是把屬于一個(gè)對(duì)象的所有屬性(數(shù)據(jù))組織在一起,C語(yǔ)言中的結(jié)構(gòu)體類型天生就支持這一點(diǎn)。

第二個(gè)問(wèn)題:繼承

繼承描述的是對(duì)象之間的關(guān)系,子類通過(guò)繼承父類,自動(dòng)擁有父類中的屬性和行為(也就是方法)。這個(gè)問(wèn)題只要理解了C語(yǔ)言的內(nèi)存模型,也不是問(wèn)題,只要在子類結(jié)構(gòu)體中的第一個(gè)成員變量的位置放置一個(gè)父類結(jié)構(gòu)體變量,那么子類對(duì)象就繼承了父類中的屬性。

另外補(bǔ)充一點(diǎn):學(xué)習(xí)任何一種語(yǔ)言,一定要理解內(nèi)存模型!

第三個(gè)問(wèn)題:多態(tài)

按字面理解,多態(tài)就是“多種狀態(tài)”,描述的是一種動(dòng)態(tài)的行為。在C++中,只有通過(guò)基類引用或者指針,去調(diào)用虛函數(shù)的時(shí)候才發(fā)生多態(tài),也就是說(shuō)多態(tài)是發(fā)生在運(yùn)行期間的,C++內(nèi)部通過(guò)一個(gè)虛表來(lái)實(shí)現(xiàn)多態(tài)。那么在C語(yǔ)言中,我們也可以按照這個(gè)思路來(lái)實(shí)現(xiàn)。

如果一門語(yǔ)言只支持類,而不支持多態(tài),只能說(shuō)它是基于對(duì)象的,而不是面向?qū)ο蟮摹?/p>

既然思路上沒(méi)有問(wèn)題,那么我們就來(lái)簡(jiǎn)單的實(shí)現(xiàn)一個(gè)。

三、先實(shí)現(xiàn)一個(gè)父類,解決封裝的問(wèn)題

Animal.h

#ifndef _ANIMAL_H_#define _ANIMAL_H_ // 定義父類結(jié)構(gòu)typedef struct { int age; int weight;} Animal; // 構(gòu)造函數(shù)聲明void Animal_Ctor(Animal *this, int age, int weight); // 獲取父類屬性聲明int Animal_GetAge(Animal *this);int Animal_GetWeight(Animal *this); #endifAnimal.c

#include “Animal.h” // 父類構(gòu)造函數(shù)實(shí)現(xiàn)void Animal_Ctor(Animal *this, int age, int weight){ this-》age = age; this-》weight = weight;} int Animal_GetAge(Animal *this){ return this-》age;} int Animal_GetWeight(Animal *this){ return this-》weight;}

測(cè)試一下:

#include 《stdio.h》#include “Animal.h”#include “Dog.h” int main(){ // 在棧上創(chuàng)建一個(gè)對(duì)象 Animal a; // 構(gòu)造對(duì)象 Animal_Ctor(&a, 1, 3); printf(“age = %d, weight = %d ”, Animal_GetAge(&a), Animal_GetWeight(&a)); return 0;}

可以簡(jiǎn)單的理解為:在代碼段有一塊空間,存儲(chǔ)著可以處理Animal對(duì)象的函數(shù);在棧中有一塊空間,存儲(chǔ)著a對(duì)象。

2d650680-5f63-11eb-8b86-12bb97331649.png

與C++對(duì)比:在C++的方法中,隱含著第一個(gè)參數(shù)this指針。當(dāng)調(diào)用一個(gè)對(duì)象的方法時(shí),編譯器會(huì)自動(dòng)把對(duì)象的地址傳遞給這個(gè)指針。

所以,在Animal.h中函數(shù)我們就模擬一下,顯示的定義這個(gè)this指針,在調(diào)用時(shí)主動(dòng)把對(duì)象的地址傳遞給它,這樣的話,函數(shù)就可以對(duì)任意一個(gè)Animal對(duì)象進(jìn)行處理了。

四、 實(shí)現(xiàn)一個(gè)子類,解決繼承的問(wèn)題

Dog.h

#ifndef _DOG_H_#define _DOG_H_ #include “Animal.h” // 定義子類結(jié)構(gòu)typedef struct { Animal parent; // 第一個(gè)位置放置父類結(jié)構(gòu) int legs; // 添加子類自己的屬性}Dog; // 子類構(gòu)造函數(shù)聲明void Dog_Ctor(Dog *this, int age, int weight, int legs); // 子類屬性聲明int Dog_GetAge(Dog *this);int Dog_GetWeight(Dog *this);int Dog_GetLegs(Dog *this); #endif

Dog.c

#include “Dog.h” // 子類構(gòu)造函數(shù)實(shí)現(xiàn)void Dog_Ctor(Dog *this, int age, int weight, int legs){ // 首先調(diào)用父類構(gòu)造函數(shù),來(lái)初始化從父類繼承的數(shù)據(jù) Animal_Ctor(&this-》parent, age, weight); // 然后初始化子類自己的數(shù)據(jù) this-》legs = legs;} int Dog_GetAge(Dog *this){ // age屬性是繼承而來(lái),轉(zhuǎn)發(fā)給父類中的獲取屬性函數(shù) return Animal_GetAge(&this-》parent);} int Dog_GetWeight(Dog *this){ return Animal_GetWeight(&this-》parent);} int Dog_GetLegs(Dog *this){ // 子類自己的屬性,直接返回 return this-》legs;}

測(cè)試一下:

int main(){ Dog d; Dog_Ctor(&d, 1, 3, 4); printf(“age = %d, weight = %d, legs = %d ”, Dog_GetAge(&d), Dog_GetWeight(&d), Dog_GetLegs(&d)); return 0;}

在代碼段有一塊空間,存儲(chǔ)著可以處理Dog對(duì)象的函數(shù);在棧中有一塊空間,存儲(chǔ)著d對(duì)象。由于Dog結(jié)構(gòu)體中的第一個(gè)參數(shù)是Animal對(duì)象,所以從內(nèi)存模型上看,子類就包含了父類中定義的屬性。

2da251de-5f63-11eb-8b86-12bb97331649.png

Dog的內(nèi)存模型中開頭部分就自動(dòng)包括了Animal中的成員,也即是說(shuō)Dog繼承了Animal的屬性。

五、利用虛函數(shù),解決多態(tài)問(wèn)題

在C++中,如果一個(gè)父類中定義了虛函數(shù),那么編譯器就會(huì)在這個(gè)內(nèi)存中開辟一塊空間放置虛表,這張表里的每一個(gè)item都是一個(gè)函數(shù)指針,然后在父類的內(nèi)存模型中放一個(gè)虛表指針,指向上面這個(gè)虛表。

上面這段描述不是十分準(zhǔn)確,主要看各家編譯器的處理方式,不過(guò)大部分C++處理器都是這么干的,我們可以想這么理解。

子類在繼承父類之后,在內(nèi)存中又會(huì)開辟一塊空間來(lái)放置子類自己的虛表,然后讓繼承而來(lái)的虛表指針指向子類自己的虛表。

2e251fe2-5f63-11eb-8b86-12bb97331649.png

既然C++是這么做的,那我們就用C來(lái)手動(dòng)模擬這個(gè)行為:創(chuàng)建虛表和虛表指針。

1. Animal.h為父類Animal中,添加虛表和虛表指針

#ifndef _ANIMAL_H_#define _ANIMAL_H_ struct AnimalVTable; // 父類虛表的前置聲明 // 父類結(jié)構(gòu)typedef struct { struct AnimalVTable *vptr; // 虛表指針 int age; int weight;} Animal; // 父類中的虛表struct AnimalVTable{ void (*say)(Animal *this); // 虛函數(shù)指針}; // 父類中實(shí)現(xiàn)的虛函數(shù)void Animal_Say(Animal *this); #endif

2. Animal.c

#include 《assert.h》#include “Animal.h” // 父類中虛函數(shù)的具體實(shí)現(xiàn)static void _Animal_Say(Animal *this){ // 因?yàn)楦割怉nimal是一個(gè)抽象的東西,不應(yīng)該被實(shí)例化。 // 父類中的這個(gè)虛函數(shù)不應(yīng)該被調(diào)用,也就是說(shuō)子類必須實(shí)現(xiàn)這個(gè)虛函數(shù)。 // 類似于C++中的純虛函數(shù)。 assert(0); } // 父類構(gòu)造函數(shù)void Animal_Ctor(Animal *this, int age, int weight){ // 首先定義一個(gè)虛表 static struct AnimalVTable animal_vtbl = {_Animal_Say}; // 讓虛表指針指向上面這個(gè)虛表 this-》vptr = &animal_vtbl; this-》age = age; this-》weight = weight;} // 測(cè)試多態(tài):傳入的參數(shù)類型是父類指針void Animal_Say(Animal *this){ // 如果this實(shí)際指向一個(gè)子類Dog對(duì)象,那么this-》vptr這個(gè)虛表指針指向子類自己的虛表, // 因此,this-》vptr-》say將會(huì)調(diào)用子類虛表中的函數(shù)。 this-》vptr-》say(this);}

2e64ec44-5f63-11eb-8b86-12bb97331649.png

在??臻g定義了一個(gè)虛函數(shù)表animal_vtbl,這個(gè)表中的每一項(xiàng)都是一個(gè)函數(shù)指針,例如:函數(shù)指針say就指向了代碼段中的函數(shù)_Animal_Say()。 》 對(duì)象a的第一個(gè)成員vptr是一個(gè)指針,指向了這個(gè)虛函數(shù)表animal_vtbl。

3. Dog.h不變

4. Dog.c中定義子類自己的虛表

#include “Dog.h” // 子類中虛函數(shù)的具體實(shí)現(xiàn)static void _Dog_Say(Dog *this){ printf(“dag say ”);} // 子類構(gòu)造函數(shù)void Dog_Ctor(Dog *this, int age, int weight, int legs){ // 首先調(diào)用父類構(gòu)造函數(shù)。 Animal_Ctor(&this-》parent, age, weight); // 定義子類自己的虛函數(shù)表 static struct AnimalVTable dog_vtbl = {_Dog_Say}; // 把從父類中繼承得到的虛表指針指向子類自己的虛表 this-》parent.vptr = &dog_vtbl; // 初始化子類自己的屬性 this-》legs = legs;}

5. 測(cè)試一下

int main(){ // 在棧中創(chuàng)建一個(gè)子類Dog對(duì)象 Dog d; Dog_Ctor(&d, 1, 3, 4); // 把子類對(duì)象賦值給父類指針 Animal *pa = &d; // 傳遞父類指針,將會(huì)調(diào)用子類中實(shí)現(xiàn)的虛函數(shù)。 Animal_Say(pa);}

內(nèi)存模型如下:

2eba9220-5f63-11eb-8b86-12bb97331649.png

對(duì)象d中,從父類繼承而來(lái)的虛表指針vptr,所指向的虛表是dog_vtbl。

在執(zhí)行Animal_Say(pa)的時(shí)候,雖然參數(shù)類型是指向父類Animal的指針,但是實(shí)際傳入的pa是一個(gè)指向子類Dog的對(duì)象,這個(gè)對(duì)象中的虛表指針vptr指向的是子類中自己定義的虛表dog_vtbl,這個(gè)虛表中的函數(shù)指針say指向的是子類中重新定義的虛函數(shù)_Dog_Say,因此this-》vptr-》say(this)最終調(diào)用的函數(shù)就是_Dog_Say。

基本上,在C中面向?qū)ο蟮拈_發(fā)思想就是以上這樣。這個(gè)代碼很簡(jiǎn)單,自己手敲一下就可以了。如果想偷懶,請(qǐng)?jiān)诤笈_(tái)留言,我發(fā)給您。

六、C面向?qū)ο笏枷朐陧?xiàng)目中的使用

1. Linux內(nèi)核

看一下關(guān)于socket的幾個(gè)結(jié)構(gòu)體:

struct sock { 。..} struct inet_sock { struct sock sk; 。..}; struct udp_sock { struct sock sk; 。..};

2ee7efc2-5f63-11eb-8b86-12bb97331649.png

sock可以看作是父類,inet_sock和udp_sock的第一個(gè)成員都是是sock類型,從內(nèi)存模型上看相當(dāng)于是繼承了sock中的所有屬性。

2. glib庫(kù)

以最簡(jiǎn)單的字符串處理函數(shù)來(lái)舉例:

GString *g_string_truncate(GString *string, gint len)GString *g_string_append(GString *string, gchar *val)GString *g_string_prepend(GString *string, gchar *val)

API函數(shù)的第一個(gè)參數(shù)都是一個(gè)GString對(duì)象指針,指向需要處理的那個(gè)字符串對(duì)象。

GString *s1, *s2;s1 = g_string_new(“Hello”);s2 = g_string_new(“Hello”); g_string_append(s1,“ World!”);g_string_append(s2,“ World!”);

3. 其他項(xiàng)目

還有一些項(xiàng)目,雖然從函數(shù)的參數(shù)上來(lái)看,似乎不是面向?qū)ο蟮?,但是在?shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)上看來(lái),也是面向?qū)ο蟮乃枷?,比如?/p>

1. Modbus協(xié)議的開源庫(kù)libmodbus

2. 用于家庭自動(dòng)化的無(wú)線通訊協(xié)議ZWave

3. 很久之前的高通手機(jī)開發(fā)平臺(tái)BREW

原文標(biāo)題:一步步分析:C語(yǔ)言如何面向?qū)ο缶幊?/p>

文章出處:【微信公眾號(hào):嵌入式ARM】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5125

    文章

    19438

    瀏覽量

    313199
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7628

    瀏覽量

    139758
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3673

    瀏覽量

    94697

原文標(biāo)題:一步步分析:C語(yǔ)言如何面向?qū)ο缶幊?/p>

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    單片機(jī)c語(yǔ)言編程實(shí)例大全

    單片機(jī)c語(yǔ)言編程實(shí)例大全_18
    發(fā)表于 04-30 16:11 ?0次下載

    深入理解C語(yǔ)言C語(yǔ)言循環(huán)控制

    C語(yǔ)言編程中,循環(huán)結(jié)構(gòu)是至關(guān)重要的,它可以讓程序重復(fù)執(zhí)行特定的代碼塊,從而提高編程效率。然而,為了避免程序進(jìn)入無(wú)限循環(huán),C
    的頭像 發(fā)表于 04-29 18:49 ?378次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>:<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>循環(huán)控制

    gitee 支持的編程語(yǔ)言有哪些

    Gitee 支持的常見編程語(yǔ)言: Python :一種廣泛使用的高級(jí)編程語(yǔ)言,以其清晰的語(yǔ)法和代碼可讀性而聞名。 Java :一種面向
    的頭像 發(fā)表于 01-06 09:50 ?461次閱讀

    Triton編譯器支持的編程語(yǔ)言

    編寫和優(yōu)化深度學(xué)習(xí)代碼。Python是一種廣泛使用的高級(jí)編程語(yǔ)言,具有簡(jiǎn)潔易讀、易于上手、庫(kù)豐富等特點(diǎn),非常適合用于深度學(xué)習(xí)應(yīng)用的開發(fā)。 二、領(lǐng)域特定語(yǔ)言(DSL) Triton也提供了一種針對(duì)深度學(xué)習(xí)領(lǐng)域的特定
    的頭像 發(fā)表于 12-24 17:33 ?804次閱讀

    NPU支持的編程語(yǔ)言有哪些

    NPU(Neural Processing Unit)是一種專門為深度學(xué)習(xí)和人工智能應(yīng)用設(shè)計(jì)的處理器。NPU支持的編程語(yǔ)言通常與它所集成的平臺(tái)或框架緊密相關(guān)。以下是一些常見的編程語(yǔ)言
    的頭像 發(fā)表于 11-15 09:21 ?1592次閱讀

    C語(yǔ)言中的socket編程基礎(chǔ)

    Socket編程簡(jiǎn)介 Socket是一種通信機(jī)制,允許程序之間進(jìn)行通信。在C語(yǔ)言中,socket編程是網(wǎng)絡(luò)編程的基礎(chǔ)。通過(guò)使用socket,
    的頭像 發(fā)表于 11-01 16:51 ?892次閱讀

    單片機(jī)編程語(yǔ)言有哪些選擇

    常用的單片機(jī)編程語(yǔ)言,以及它們的特點(diǎn)和應(yīng)用場(chǎng)景: 1. C語(yǔ)言 特點(diǎn) :C語(yǔ)言是一種通用的
    的頭像 發(fā)表于 11-01 14:13 ?1885次閱讀

    MCU編程語(yǔ)言和開發(fā)環(huán)境介紹

    MCU編程語(yǔ)言 MCU編程語(yǔ)言是用于編寫MCU程序的高級(jí)編程語(yǔ)言,它們使得開發(fā)者能夠更高效地開
    的頭像 發(fā)表于 11-01 11:51 ?1817次閱讀

    C語(yǔ)言與Java語(yǔ)言的對(duì)比

    C語(yǔ)言和Java語(yǔ)言都是當(dāng)前編程領(lǐng)域中的重要成員,它們各自具有獨(dú)特的優(yōu)勢(shì)和特點(diǎn),適用于不同的應(yīng)用場(chǎng)景。以下將從語(yǔ)法特性、內(nèi)存管理、跨平臺(tái)性、性能、應(yīng)用領(lǐng)域等多個(gè)方面對(duì)
    的頭像 發(fā)表于 10-29 17:31 ?835次閱讀

    C語(yǔ)言與其他編程語(yǔ)言的比較

    C語(yǔ)言作為一種歷史悠久的編程語(yǔ)言,自其誕生以來(lái),一直在軟件開發(fā)領(lǐng)域扮演著重要角色。它以其高效、靈活和可移植性強(qiáng)的特點(diǎn),成為了系統(tǒng)級(jí)編程的首選
    的頭像 發(fā)表于 10-29 17:30 ?803次閱讀

    Orin芯片的編程語(yǔ)言支持

    語(yǔ)言支持 Orin芯片支持多種編程語(yǔ)言,以滿足不同開發(fā)者的需求。其中,C/C++和Python是兩種廣泛應(yīng)用的
    的頭像 發(fā)表于 10-27 16:45 ?762次閱讀

    plc編程st語(yǔ)言怎么編

    PLC(可編程邏輯控制器)編程中的ST(Structured Text)語(yǔ)言是一種高級(jí)編程語(yǔ)言,它類似于Pascal或
    的頭像 發(fā)表于 08-25 10:05 ?2329次閱讀

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-初識(shí)倉(cāng)頡開發(fā)語(yǔ)言

    式和面向對(duì)象等多范式編程,融合了高階函數(shù)、代數(shù)數(shù)據(jù)類型、模式匹配、泛型等函數(shù)式語(yǔ)言的先進(jìn)特性,還有封裝、接口、繼承、子類型多態(tài)等支持模塊化開發(fā)的面向
    發(fā)表于 08-15 10:00

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-初識(shí)倉(cāng)頡開發(fā)語(yǔ)言

    式和面向對(duì)象等多范式編程,融合了高階函數(shù)、代數(shù)數(shù)據(jù)類型、模式匹配、泛型等函數(shù)式語(yǔ)言的先進(jìn)特性,還有封裝、接口、繼承、子類型多態(tài)等支持模塊化開發(fā)的面向
    發(fā)表于 07-30 17:49

    PLC編程語(yǔ)言C語(yǔ)言的區(qū)別

    在工業(yè)自動(dòng)化和計(jì)算機(jī)編程領(lǐng)域中,PLC(可編程邏輯控制器)編程語(yǔ)言C語(yǔ)言各自扮演著重要的角色。
    的頭像 發(fā)表于 06-14 17:11 ?4208次閱讀