C語(yǔ)言和C++的命名規(guī)范以及常見(jiàn)命名法

本篇內(nèi)容介紹了“C語(yǔ)言和C++的命名規(guī)范以及常見(jiàn)命名法”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

樂(lè)清ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書(shū)合作)期待與您的合作!

1.命名規(guī)范

本系列的第一篇,命名風(fēng)格本就是有關(guān)藝術(shù)審美,沒(méi)有美與丑的絕對(duì)標(biāo)準(zhǔn),本文難免帶有主觀選擇傾向,但是會(huì)盡量保持客觀的態(tài)度歸納幾種主流的命名風(fēng)格,僅供參考。制定規(guī)范是為了方便團(tuán)隊(duì)溝通和利于代碼維護(hù),雖然并不能符合每個(gè)藝術(shù)家的胃口。對(duì)于獨(dú)立開(kāi)發(fā)者,花點(diǎn)時(shí)間設(shè)計(jì)自己的編碼風(fēng)格也是有助于提高能力的,至少可以在看到自己代碼的時(shí)候感覺(jué)美美噠~~。本文參考了<Google C++ 風(fēng)格指南>,<Qt 編碼風(fēng)格>,當(dāng)然還有維基百科,以后不累述。

1.1.常見(jiàn)命名法

蛇形命名法 [snake_case]:

like_this,常見(jiàn)于Linux內(nèi)核,C++標(biāo)準(zhǔn)庫(kù),Boost以及Ruby,Rust等語(yǔ)言。

駝峰命名法 [camelCase]:

likeThis,為了和帕斯卡命名法區(qū)分,本文特指小駝峰式命名法,常見(jiàn)于Qt以及Java。

帕斯卡命名法[PascalCase]:

LikeThis,又名大駝峰式命名法,常見(jiàn)于Windows API函數(shù)以及C#。

匈牙利命名法[Hungarian notation]:

dwWidth,系統(tǒng)匈牙利命名法是被黑的最多的,主要認(rèn)為在有類型檢查的語(yǔ)言里發(fā)現(xiàn)類型錯(cuò)誤編譯器比人更可靠;在有IDE的情況下,找到一個(gè)變量的類型也不是一件難事;通常我們看到一個(gè)陌生的變量的時(shí)候,如果不知道它是干什么的,知道它的類型好像也并沒(méi)有什么用;并且在重構(gòu)的時(shí)候,如果你要改變一個(gè)變量的類型,盡管其功能并沒(méi)有變,你還是要去修改變量名。所以除非是Windows系統(tǒng)開(kāi)發(fā),不建議使用系統(tǒng)匈牙利命名法。

rwPosition,匈牙利應(yīng)用命名法不表示變量的類型,而是用前綴表示變量的目的,或者它代表了什么。這種變量命名方法在幫助程序員理解變量的用途上是很有幫助的。但是建議前綴不要使用縮寫(xiě),除非所用的縮寫(xiě)是普遍共識(shí)。

C是一門(mén)樸素的語(yǔ)言,你使用的命名也應(yīng)該這樣。與Modula-2和Pascal程序員不同,C程序員不使用諸如“ThisVariableIsATemporaryCounter”這樣“聰明”的名字。C程序員應(yīng)該叫它“tmp”,這寫(xiě)起來(lái)更簡(jiǎn)單,也不會(huì)更難懂。
然而,當(dāng)面對(duì)復(fù)雜情況時(shí)就有些棘手,給全局變量取一個(gè)描述性的名字是必要的。把一個(gè)全局函數(shù)叫做“foo”是一種目光短淺的行為。全局函數(shù)也一樣,如果你有一個(gè)統(tǒng)計(jì)當(dāng)前用戶個(gè)數(shù)的函數(shù),應(yīng)當(dāng)把它命名為“count_active_user()”或者簡(jiǎn)單點(diǎn)些的類似名稱,不應(yīng)該命名為“cntusr()”。

1、三種流行的命名法則

目前,業(yè)界共有四種命名法則:駝峰命名法、匈牙利命名法、帕斯卡命名法和下劃線命名法,其中前三種是較為流行的命名法。

(1)駝峰命令法。正如它的名稱所表示的那樣,是指混合使用大小寫(xiě)字母來(lái)構(gòu)成變量和函數(shù)的名字。例如,下面是分別用駱駝式命名法和下劃線法命名的同一個(gè)函數(shù):
printEmployeePaychecks();
print_employee_paychecks();

第一個(gè)函數(shù)名使用了駝峰命名法,函數(shù)名中的每一個(gè)邏輯斷點(diǎn)都有一個(gè)大寫(xiě)字母來(lái)標(biāo)記。第二個(gè)函數(shù)名使用了下劃線法,函數(shù)名中的每一個(gè)邏輯斷點(diǎn)都有一個(gè)下劃線來(lái)標(biāo)記。

駝峰命名法近年來(lái)越來(lái)越流行了,在許多新的函數(shù)庫(kù)和Microsoft Windows這樣的環(huán)境中,它使用得當(dāng)相多。另一方面,下劃線法是C出現(xiàn)后開(kāi)始流行起來(lái)的,在許多舊的程序和UNIX這樣的環(huán)境中,它的使用非常普遍。

(2)匈牙利命名法。廣泛應(yīng)用于象Microsoft Windows這樣的環(huán)境中。Windows 編程中用到的變量(還包括宏)的命名規(guī)則為匈牙利命名法,這種命名技術(shù)是由一位能干的 Microsoft 程序員查爾斯-西蒙尼(Charles Simonyi) 提出的。

匈牙利命名法通過(guò)在變量名前面加上相應(yīng)的小寫(xiě)字母的符號(hào)標(biāo)識(shí)作為前綴,標(biāo)識(shí)出變量的作用域、類型等。這些符號(hào)可以多個(gè)同時(shí)使用,順序是先m_(成員變量)、再指針、再簡(jiǎn)單數(shù)據(jù)類型、再其它。這樣做的好處在于能增加程序的可讀性,便于對(duì)程序的理解和維護(hù)。

例如:m_lpszStr, 表示指向一個(gè)以0字符結(jié)尾的字符串的長(zhǎng)指針成員變量。
匈牙利命名法關(guān)鍵是:標(biāo)識(shí)符的名字以一個(gè)或者多個(gè)小寫(xiě)字母開(kāi)頭作為前綴;前綴之后的是首字母大寫(xiě)的一個(gè)單詞或多個(gè)單詞組合,該單詞要指明變量的用途。

(3)帕斯卡(pascal)命名法。與駝峰命名法類似,二者的區(qū)別在于:駝峰命名法是首字母小寫(xiě),而帕斯卡命名法是首字母大寫(xiě),如:
DisplayInfo();
string UserName;

二者都是采用了帕斯卡命名法。

(4)三種命名規(guī)則的小結(jié):MyData就是一個(gè)帕斯卡命名的示例;myData是一個(gè)駝峰命名法,它第一個(gè)單詞的第一個(gè)字母小寫(xiě),后面的單詞首字母大寫(xiě),看起來(lái)像一個(gè)駱駝;iMyData是一個(gè)匈牙利命名法,它的小寫(xiě)的i說(shuō)明了它的型態(tài),后面的和帕斯卡命名相同,指示了該變量的用途。

2、命名的基本原則

(1)標(biāo)識(shí)符的命名要清晰、明了,有明確含義,同時(shí)使用完整的單詞或大家基本可以理解的縮寫(xiě),避免使人產(chǎn)生誤解——盡量采用采用英文單詞或全部中文全拼表示,若出現(xiàn)英文單詞和中文混合定義時(shí),使用連字符“_”將英文與中文割開(kāi)。較短的單詞可通過(guò)去掉“元音”形成縮寫(xiě);較長(zhǎng)的單詞可取單詞的頭幾個(gè)字母形成縮寫(xiě);一些單詞有大家公認(rèn)的縮寫(xiě)。例如:temp->tmp、flag->flg、statistic->stat、increment->inc、message->msg等縮寫(xiě)能夠被大家基本認(rèn)可。

(2)命名中若使用特殊約定或縮寫(xiě),則要有注釋說(shuō)明。應(yīng)該在源文件的開(kāi)始之處,對(duì)文件中所使用的縮寫(xiě)或約定,特別是特殊的縮寫(xiě),進(jìn)行必要的注釋說(shuō)明。

(3)自己特有的命名風(fēng)格,要自始至終保持一致,不可來(lái)回變化。個(gè)人的命名風(fēng)格,在符合所在項(xiàng)目組或產(chǎn)品組的命名規(guī)則的前提下,才可使用。(即命名規(guī)則中沒(méi)有規(guī)定到的地方才可有個(gè)人命名風(fēng)格)。

(4)對(duì)于變量命名,禁止取單個(gè)字符(如i 、j 、k... ),建議除了要有具體含義外,還能表明其變量類型、數(shù)據(jù)類型等,但i 、j 、k 作局部循環(huán)變量是允許的。變量,尤其是局部變量,如果用單個(gè)字符表示,很容易敲錯(cuò)(如i寫(xiě)成j),而編譯時(shí)又檢查不出來(lái),有可能為了這個(gè)小小的錯(cuò)誤而花費(fèi)大量的查錯(cuò)時(shí)間。

(5)除非必要,不要用數(shù)字或較奇怪的字符來(lái)定義標(biāo)識(shí)符。

(6)命名規(guī)范必須與所使用的系統(tǒng)風(fēng)格保持一致,并在同一項(xiàng)目中統(tǒng)一。

(7)在同一軟件產(chǎn)品內(nèi),應(yīng)規(guī)劃好接口部分標(biāo)識(shí)符(變量、結(jié)構(gòu)、函數(shù)及常量)的命名,防止編譯、鏈接時(shí)產(chǎn)生沖突。對(duì)接口部分的標(biāo)識(shí)符應(yīng)該有更嚴(yán)格限制,防止沖突。如可規(guī)定接口部分的變量與常量之前加上“模塊”標(biāo)識(shí)等。

(8)用正確的反義詞組命名具有互斥意義的變量或相反動(dòng)作的函數(shù)等。

下面是一些在軟件中常用的反義詞組。
add / remove begin / end create / destroy
insert / delete first / last g et / release
increment / decrement put / get
add / delete lock / unlock open / close
min / max old / new start / stop
next / previous source / target show / hide
send / receive source / destination
cut / paste up / down

示例:
int min_sum;
int max_sum;
int add_user( BYTE *user_name );
int delete_user( BYTE *user_name );

(9)除了編譯開(kāi)關(guān)/ 頭文件等特殊應(yīng)用,應(yīng)避免使用_EXAMPLE_TEST_ 之類以下劃線開(kāi)始和結(jié)尾的定義。

3、變量名的命名規(guī)則

(1)變量的命名規(guī)則要求用“匈牙利法則”。
即開(kāi)頭字母用變量的類型,其余部分用變量的英文意思、英文的縮寫(xiě)、中文全拼或中文全拼的縮寫(xiě),要求單詞的第一個(gè)字母應(yīng)大寫(xiě)。
即: 變量名=變量類型+變量的英文意思(或英文縮寫(xiě)、中文全拼、中文全拼縮寫(xiě))
對(duì)非通用的變量,在定義時(shí)加入注釋說(shuō)明,變量定義盡量可能放在函數(shù)的開(kāi)始處。
見(jiàn)下表:
bool 用b開(kāi)頭 bFlg
int 用i開(kāi)頭 iCount
short int 用n開(kāi)頭 nStepCount
long int 用l開(kāi)頭 lSum
char 用c開(kāi)頭 cCount
unsigned char 用by開(kāi)頭
float 用f開(kāi)頭 fAvg
double 用d開(kāi)頭 dDeta
unsigned int(WORD) 用w開(kāi)頭 wCount
unsigned long int(DWORD) 用dw開(kāi)頭 dwBroad
字符串 用s開(kāi)頭 sFileName
用0結(jié)尾的字符串 用sz開(kāi)頭 szFileName

(2)指針變量命名的基本原則為:
對(duì)一重指針變量的基本原則為:“p”+變量類型前綴+命名,如一個(gè)float*型應(yīng)該表示為pfStat。對(duì)二重指針變量的基本規(guī)則為:“pp”+變量類型前綴+命名。對(duì)三重指針變量的基本規(guī)則為:“ppp”+變量類型前綴+命名。

(3)全局變量用g_開(kāi)頭,如一個(gè)全局的長(zhǎng)型變量定義為g_lFailCount。即:變量名=g_+變量類型+變量的英文意思(或縮寫(xiě))。此規(guī)則還可避免局部變量和全局變量同名而引起的問(wèn)題。

(4)靜態(tài)變量用s_開(kāi)頭,如一個(gè)靜態(tài)的指針變量定義為s_plPerv_Inst。即: 變量名=s_+變量類型+變量的英文意思(或縮寫(xiě))

(5)對(duì)枚舉類型(enum)中的變量,要求用枚舉變量或其縮寫(xiě)做前綴。并且要求用大寫(xiě)。如:
enum cmEMDAYS
{
EMDAYS_MONDAY;
EMDAYS_TUESDAY;
……
};

(6)對(duì)struct、union變量的命名要求定義的類型用大寫(xiě)。并要加上前綴,其內(nèi)部變量的命名規(guī)則與變量命名規(guī)則一致。

結(jié)構(gòu)一般用S開(kāi)頭,如:
struct ScmNPoint
{
int nX;//點(diǎn)的X位置
int nY; //點(diǎn)的Y位置
};

聯(lián)合體一般用U開(kāi)頭,如:
union UcmLPoint
{
LONG lX;
LONG lY;
}

(7)對(duì)常量(包括錯(cuò)誤的編碼)命名,要求常量名用大寫(xiě),常量名用英文表達(dá)其意思。當(dāng)需要由多個(gè)單詞表示時(shí),單詞與單詞之間必須采用連字符“_”連接。
如:#define CM_FILE_NOT_FOUND CMMAKEHR(0X20B) 其中CM表示類別。

(8)對(duì)const 的變量要求在變量的命名規(guī)則前加入c_。即:c_+變量命名規(guī)則;示例:const char* c_szFileName;

4、函數(shù)的命名規(guī)范

(1)函數(shù)的命名應(yīng)該盡量用英文(或英文縮寫(xiě)、中文全拼、中文全拼縮寫(xiě))表達(dá)出函數(shù)完成的功能——函數(shù)名應(yīng)準(zhǔn)確描述函數(shù)的功能。遵循動(dòng)賓結(jié)構(gòu)的命名法則,函數(shù)名中動(dòng)詞在前,并在命名前加入函數(shù)的前綴,函數(shù)名的長(zhǎng)度不得少于8個(gè)字母。函數(shù)名首字大寫(xiě),若包含有兩個(gè)單詞的每個(gè)單詞首字母大寫(xiě)。如果是OOP 方法,可以只有動(dòng)詞(名詞是對(duì)象本身)。示例:
LONG GetDeviceCount(……);
void print_record( unsigned int rec_ind ) ;
int input_record( void ) ;
unsigned char get_current_color( void ) ;

(2)避免使用無(wú)意義或含義不清的動(dòng)詞為函數(shù)命名。如使用process、handle等為函數(shù)命名,因?yàn)檫@些動(dòng)詞并沒(méi)有說(shuō)明要具體做什么。

(3)必須使用函數(shù)原型聲明。函數(shù)原型聲明包括:引用外來(lái)函數(shù)及內(nèi)部函數(shù),外部引用必須在右側(cè)注明函數(shù)來(lái)源: 模塊名及文件名;內(nèi)部函數(shù),只要注釋其定義文件名——和調(diào)用者在同一文件中(簡(jiǎn)單程序)時(shí)不需要注釋。
應(yīng)確保每個(gè)函數(shù)聲明中的參數(shù)的名稱、類型和定義中的名稱、類型一致。

5、函數(shù)參數(shù)命名規(guī)范

(1)參數(shù)名稱的命名參照變量命名規(guī)范。
(2)為了提高程序的運(yùn)行效率,減少參數(shù)占用的堆棧,傳遞大結(jié)構(gòu)的參數(shù),一律采用指針或引用方式傳遞。
(3)為了便于其他程序員識(shí)別某個(gè)指針參數(shù)是入口參數(shù)還是出口參數(shù),同時(shí)便于編譯器檢查錯(cuò)誤,應(yīng)該在入口參數(shù)前加入const標(biāo)志。
如:……cmCopyString(const CHAR * c_szSource, CHAR * szDest)

6、文件名(包括動(dòng)態(tài)庫(kù)、組件、控件、工程文件等)的命名規(guī)范

文件名的命名要求表達(dá)出文件的內(nèi)容,要求文件名的長(zhǎng)度不得少于5個(gè)字母,嚴(yán)禁使用象file1,myfile之類的文件名。

1.2.文件命名

文件名后綴:

# C語(yǔ)言不糾結(jié)
file.h & file.c
# C++ Group.1(注意C是大寫(xiě))
file.h & file.C
# C++ Group.2
file.hh & file.cc
# C++ Group.3
file.hpp & file.cpp
# C++ Group.4
file.hxx & file.cxx

tip.1:c語(yǔ)言沒(méi)有選擇,以下僅討論c++;
tip.2:各組合可以混搭,比如常見(jiàn)的file.cpp搭配file.h和Google風(fēng)格的file.cc搭配file.h;
tip.3:強(qiáng)迫癥可以選擇不混搭的各組,這樣看起來(lái)有對(duì)稱感;
tip.4:不要選擇第1組大寫(xiě)C的后綴,特別是在Windows這樣不區(qū)分大小寫(xiě)的操作系統(tǒng)上;
tip.5:一些后綴名可能不被某些較老的編譯器或IDE所默認(rèn)支持,例如vs2005默認(rèn)沒(méi)有擴(kuò)展.hh后綴;
tip.6:如果需要跨平臺(tái),推薦選擇第3組,至少boost是這么選的;

文件名命名:

# Teddy項(xiàng)目UserLog文件為例:
# Group.1
UserLog.c & TedUserLog.c
# Group.2
userlog.c & teduserlog.c
# Group.3
userlog.c & ted_userlog.c
# Group.4
user_log.c & ted_user_log.c
# Group.5
user-log.c & ted-user-log.c

tip.1:如果需要將源碼直接發(fā)布,可以使用項(xiàng)目名做前綴,防止鏈接時(shí)文件名沖突(msvc好像能自動(dòng)重命名沖突的.obj文件,但是跨平臺(tái)程序不能依賴這個(gè)特性);
tip.2:各組文件名風(fēng)格都沒(méi)有明顯的缺點(diǎn),但要注意在區(qū)分大小寫(xiě)的系統(tǒng)上UserLog.c和userlog.c是兩個(gè)文件;

1.3.類型命名

/*
** 基本數(shù)據(jù)類型的重定義,小寫(xiě)比首字母大寫(xiě)更有利于延長(zhǎng)Shift壽命,
** 但也更容易產(chǎn)生命名沖突。
*/
typedef unsigned char byte;
typedef unsigned char byte_t;
typedef unsigned char Byte;
typedef unsigned char Byte_t;

/*
** 類與結(jié)構(gòu)體常見(jiàn)的風(fēng)格是采用PascalCase,不推薦使用camelCase
** 這種怪異的風(fēng)格。
*/
class HashTable { ...
class hash_table { ...
struct FileInfo { ...
struct file_info { ...

/* C語(yǔ)言常見(jiàn)到的風(fēng)格還有結(jié)構(gòu)體名稱加'_t'后綴 */
struct fileinfo_t { ...
struct FileInfo_t { ...

/* 枚舉命名常見(jiàn)PascalCase風(fēng)格 */
enum FileFlags { ...
enum file_flags { ...

tip.1:c語(yǔ)言沒(méi)有命名空間,為防止命名沖突,常見(jiàn)做法是將項(xiàng)目名或其縮寫(xiě)作為類型名稱前綴;
tip.2:類,結(jié)構(gòu)體,枚舉的命名風(fēng)格盡量保持一致;

1.4.命名空間命名

/* 一般使用項(xiàng)目名稱,風(fēng)格看喜好。 */
namespace my_project { ...
namespace MyProject { ...

tip.1:確保命名空間不會(huì)和常用的庫(kù)沖突;

1.5.函數(shù)和變量命名

/*
** 在函數(shù)和變量命名風(fēng)格上PascalCase,camelCase,
** snake_case三足鼎立,選擇憑喜好。
*/
void FunctionName(void) { ...
void functionName(void) { ...
void function_name(void) { ...

long VarName;
long varName;
long var_name;

/*
** tip.1:snake_case在名稱比較長(zhǎng)時(shí)可讀性較好;
*/
long variable_names_in_snake_case;
long VariableNamesInPascalCase;
long variableNamesInCamelCase;

/*
** tip.2:PascalCase和camelCase在函數(shù)中的區(qū)分度較好,
** 在快速掃描代碼邏輯的時(shí)候不易被其它符號(hào)所干擾。
*/
long FabonacciFunction(long rabbitNums)
{
 if (rabbitNums < 2) {
 return rabbitNums;
 }
 long resultOne = FabonacciFunction(rabbitNums - 1);
 long resultTwo = FabonacciFunction(rabbitNums - 2);
 return resultOne + resultTwo;
}

long fabonacci_function(long rabbit_nums)
{
 if (rabbit_nums < 2) {
 return rabbit_nums;
 }
 long result_one = fabonacci_function(rabbit_nums - 1);
 long result_two = fabonacci_function(rabbit_nums - 2);
 return result_one + result_two;
}

tip.3:如果類需要兼容標(biāo)準(zhǔn)庫(kù)迭代器或是要支持range for,begin()和end()函數(shù)會(huì)破壞PascalCase風(fēng)格的一致性;

1.6.類成員變量和全局變量命名

/*
** 類成員變量和全局變量的命名風(fēng)格和局部變量的命名風(fēng)格
** 并沒(méi)有更多的區(qū)別。唯一的問(wèn)題是,是否要加前綴或后綴
** 以方便和局部變量區(qū)分開(kāi)來(lái)。
*/
class UserInfo {
 ...
private:
 std::string user_name_; /* Google style */
 std::string m_userName; /* Hungarian notation */
 /* 不推薦前綴'_'的風(fēng)格,可能會(huì)和標(biāo)準(zhǔn)庫(kù)命名沖突 */
};

/* 全局變量要少用,推薦加前綴用于區(qū)分 */
extern "C" long g_commonCount;

tip.1:在有IDE提示時(shí),前綴"m_"的類成員變量能夠很快被找到,如果不喜歡這種風(fēng)格,"this->"同樣也很便利;

1.7.常量和枚舉值命名

/*
** 常量和枚舉值的命名風(fēng)格建議和局部變量的命名風(fēng)格區(qū)分開(kāi),
** 常見(jiàn)的有全字母大寫(xiě)加'_'的風(fēng)格,PascalCase風(fēng)格,以及
** Google加'k'前綴的風(fēng)格。
*/
static const int DAYS_IN_WEEK = 7;
static const int kDaysInWeek = 7;

enum FileOpenMode {
 ReadOnly, WriteOnly, ReadWrite
};

enum FileOpenMode {
 READ_ONLY, WRITE_ONLY, READ_WRITE
};

tip.1:如果可以使用c++11特性,推薦enum class,否則可以在有歧義的枚舉值中重復(fù)枚舉類型的名字;

1.8.宏命名

/* 宏命名推薦使用全字母大寫(xiě)加'_'分隔的風(fēng)格 */
#define OS_UNIX
#define OS_LINUX
#define OS_WINNT

/* 除非你想用條件編譯將某些功能變?yōu)榭蛇x項(xiàng) */
#ifdef USE_TCMALLOC
#define my_malloc tcmalloc
#else
#define my_malloc malloc
#endif

tip.1:能用常量替代宏的地方盡量使用常量吧;

“C語(yǔ)言和C++的命名規(guī)范以及常見(jiàn)命名法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

分享名稱:C語(yǔ)言和C++的命名規(guī)范以及常見(jiàn)命名法
網(wǎng)頁(yè)網(wǎng)址:http://muchs.cn/article38/isjcpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、虛擬主機(jī)、網(wǎng)站營(yíng)銷、ChatGPT、微信小程序、網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)