一位老外的嵌入式C編碼規(guī)范

掃描關(guān)注一起學(xué)嵌入式,一起學(xué)習(xí),一起成長(zhǎng)


最重要的一條規(guī)則

編寫(xiě)代碼時(shí)最重要的一條規(guī)則是:檢查周?chē)拇a并嘗試模仿它。

作為維護(hù)人員,如果收到的補(bǔ)丁明顯與周?chē)a的編碼風(fēng)格不同,這是令人沮喪的。這是不尊重人的,就像某人穿著泥濘的鞋子走進(jìn)一間一塵不染的房子。

因此,無(wú)論本文推薦的是什么,如果已經(jīng)編寫(xiě)了代碼并且您正在對(duì)其進(jìn)行修補(bǔ),請(qǐng)保持其當(dāng)前的樣式一致,即使它不是您最喜歡的樣式。

一般規(guī)則

這里列出了最明顯和最重要的一般規(guī)則。在你繼續(xù)閱讀其他章節(jié)之前,請(qǐng)仔細(xì)檢查它們。

  • 使用C99標(biāo)準(zhǔn)

  • 不使用制表符,而是使用空格

  • 每個(gè)縮進(jìn)級(jí)別使用4個(gè)空格

  • 在關(guān)鍵字和左括號(hào)之間使用一個(gè)空格

  • 在函數(shù)名和左括號(hào)之間不要使用空格

int32_t?a?=?sum(4,?3);??????????????/*?OK?*/
int32_t?a?=?sum?(4,?3);?????????????/*?Wrong?*/
  • 不要在變量/函數(shù)/宏/類(lèi)型中使用__或_前綴。這是為C語(yǔ)言本身保留的

  • 對(duì)于嚴(yán)格的模塊私有函數(shù),使用prv_ name前綴

  • 對(duì)于包含下劃線_ char的變量/函數(shù)/宏/類(lèi)型,只能使用小寫(xiě)字母

  • 左花括號(hào)總是與關(guān)鍵字(for, while, do, switch, if,…)在同一行

size_t?i;
for?(i?=?0;?i?5;?++i)?{???????????/*?OK?*/
}
for?(i?=?0;?i?5;?++i){????????????/*?Wrong?*/
}
for?(i?=?0;?i?5;?++i)?????????????/*?Wrong?*/
{
}
  • 在比較操作符和賦值操作符之前和之后使用單個(gè)空格
int32_t?a;
a?=?3?+?4;??????????????/*?OK?*/
for?(a?=?0;?a?5;?++a)?/*?OK?*/
a=3+4;??????????????????/*?Wrong?*/
a?=?3+4;????????????????/*?Wrong?*/
for?(a=0;a<5;++a)???????/*?Wrong?*/
  • 每個(gè)逗號(hào)后用單空格
func_name(5,?4);????????/*?OK?*/
func_name(4,3);?????????/*?Wrong?*/
  • 不要初始化靜態(tài)和全局變量為0(或NULL),讓編譯器為您做
static?int32_t?a;???????/*?OK?*/
static?int32_t?b?=?4;???/*?OK?*/
static?int32_t?a?=?0;???/*?Wrong?*/

void
my_func(void)?
{
????static?int32_t*?ptr;/*?OK?*/
????static?char?abc?=?0;/*?Wrong?*/
}
  • 在同一行中聲明所有相同類(lèi)型的局部變量
void
my_func(void)?
{
????char?a;?????????????/*?OK?*/
????char?b;?????????????/*?Wrong,?variable?with?char?type?already?exists?*/
????char?a,?b;??????????/*?OK?*/
}
  • 按順序聲明局部變量

i.自定義結(jié)構(gòu)和枚舉

ii.整數(shù)類(lèi)型,更寬的無(wú)符號(hào)類(lèi)型優(yōu)先

iii.單/雙浮點(diǎn)

int
my_func(void)?
{
????/*?1?*/
????my_struct_t?my;?????/*?First?custom?structures?*/
????my_struct_ptr_t*?p;?/*?Pointers?too?*/

????/*?2?*/
????uint32_t?a;
????int32_t?b;
????uint16_t?c;
????int16_t?g;
????char?h;
????/*?...?*/

????/*?3?*/
????double?d;
????float?f;
}
  • 總是在塊的開(kāi)頭聲明局部變量,在第一個(gè)可執(zhí)行語(yǔ)句之前
  • 在for循環(huán)中聲明計(jì)數(shù)器變量
/*?OK?*/
for?(size_t?i?=?0;?i?10;?++i)

/*?OK,?if?you?need?counter?variable?later?*/
size_t?i;
for?(i?=?0;?i?10;?++i)?{
????if?(...)?{
????????break;
????}
}
if?(i?==?10)?{

}

/*?Wrong?*/
size_t?i;
for?(i?=?0;?i?10;?++i)?...
  • 避免在聲明中使用函數(shù)調(diào)用來(lái)賦值變量,除了單個(gè)變量
void
a(void)?
{
????/*?Avoid?function?calls?when?declaring?variable?*/
????int32_t?a,?b?=?sum(1,?2);

????/*?Use?this?*/
????int32_t?a,?b;
????b?=?sum(1,?2);

????/*?This?is?ok?*/
????uint8_t?a?=?3,?b?=?4;
}
  • 除了char、float或double之外,始終使用stdint.h標(biāo)準(zhǔn)庫(kù)中聲明的類(lèi)型。例如,8位的uint8_t等

  • 不要使用stdbool.h庫(kù)。分別使用1或0表示真或假

/*?OK?*/
uint8_t?status;
status?=?0;

/*?Wrong?*/
#include?
bool?status?=?true;
  • 永遠(yuǎn)不要與真實(shí)相比較。例如,使用if(check_func()){…}替換if (check_func() == 1)

  • 總是將指針與空值進(jìn)行比較

void*?ptr;

/*?...?*/

/*?OK,?compare?against?NULL?*/
if?(ptr?==?NULL?||?ptr?!=?NULL)?{

}

/*?Wrong?*/
if?(ptr?||?!ptr)?{

}
  • 總是使用前增量(和遞減),而不是后增量(和遞減)
int32_t?a?=?0;
...

a++;????????????/*?Wrong?*/
++a;????????????/*?OK?*/

for?(size_t?j?=?0;?j?10;?++j)?{}??/*?OK?*/
  • 總是使用size_t作為長(zhǎng)度或大小變量

  • 如果函數(shù)不應(yīng)該修改指針?biāo)赶虻膬?nèi)存,則總是使用const作為指針

  • 如果不應(yīng)該修改函數(shù)的形參或變量,則總是使用const

/*?When?d?could?be?modified,?data?pointed?to?by?d?could?not?be?modified?*/
void
my_func(const?void*?d)?
{

}

/*?When?d?and?data?pointed?to?by?d?both?could?not?be?modified?*/
void
my_func(const?void*?const?d)?
{

}

/*?Not?required,?it?is?advised?*/
void
my_func(const?size_t?len)?
{

}

/*?When?d?should?not?be?modified?inside?function,?only?data?pointed?to?by?d?could?be?modified?*/
void
my_func(void*?const?d)?
{

}
  • 當(dāng)函數(shù)可以接受任何類(lèi)型的指針時(shí),總是使用void *,不要使用uint8_t *。函數(shù)在實(shí)現(xiàn)時(shí)必須注意正確的類(lèi)型轉(zhuǎn)換
/*
?*?To?send?data,?function?should?not?modify?memory?pointed?to?by?`data`?variable
?*?thus?`const`?keyword?is?important
?*
?*?To?send?generic?data?(or?to?write?them?to?file)
?*?any?type?may?be?passed?for?data,
?*?thus?use?`void?*`
?*/

/*?OK?example?*/
void
send_data(const?void*?data,?size_t?len)?
{?/*?OK?*/
????/*?Do?not?cast?`void?*`?or?`const?void?*`?*/
????const?uint8_t*?d?=?data;/*?Function?handles?proper?type?for?internal?usage?*/
}

void
send_data(const?void*?data,?int?len)?
{????/*?Wrong,?not?not?use?int?*/
}
  • 總是使用括號(hào)和sizeof操作符

  • 不要使用變長(zhǎng)數(shù)組。使用動(dòng)態(tài)內(nèi)存分配代替標(biāo)準(zhǔn)C malloc和自由函數(shù),或者如果庫(kù)/項(xiàng)目提供了自定義內(nèi)存分配,使用它的實(shí)現(xiàn)

    看看LwMEM,一個(gè)自定義內(nèi)存管理庫(kù)。

/*?OK?*/
#include?
void
my_func(size_t?size)?
{
????int32_t*?arr;
????arr?=?malloc(sizeof(*arr)?*?n);?/*?OK,?Allocate?memory?*/
????arr?=?malloc(sizeof?*arr?*?n);??/*?Wrong,?brackets?for?sizeof?operator?are?missing?*/
????if?(arr?==?NULL)?{
????????/*?FAIL,?no?memory?*/
????}

????free(arr);??/*?Free?memory?after?usage?*/
}

/*?Wrong?*/
void
my_func(size_t?size)?
{
????int32_t?arr[size];??/*?Wrong,?do?not?use?VLA?*/
}
  • 總是將variable與0進(jìn)行比較,除非它被視為布爾類(lèi)型

  • 永遠(yuǎn)不要將布爾處理的變量與0或1進(jìn)行比較。用NOT(!)代替

size_t?length?=?5;??/*?Counter?variable?*/
uint8_t?is_ok?=?0;??/*?Boolean-treated?variable?*/
if?(length)?????????/*?Wrong,?length?is?not?treated?as?boolean?*/
if?(length?>?0)?????/*?OK,?length?is?treated?as?counter?variable?containing?multi?values,?not?only?0?or?1?*/
if?(length?==?0)????/*?OK,?length?is?treated?as?counter?variable?containing?multi?values,?not?only?0?or?1?*/

if?(is_ok)??????????/*?OK,?variable?is?treated?as?boolean?*/
if?(!is_ok)?????????/*?OK,?-||-?*/
if?(is_ok?==?1)?????/*?Wrong,?never?compare?boolean?variable?against?1!?*/
if?(is_ok?==?0)?????/*?Wrong,?use?!?for?negative?check?*/
  • 對(duì)于注釋?zhuān)偸鞘褂?* comment */,即使是單行注釋
  • 在頭文件中總是包含帶有extern關(guān)鍵字的c++檢查

  • 每個(gè)函數(shù)都必須包含doxygen-enabled注釋?zhuān)词购瘮?shù)是靜態(tài)的

  • 使用英文名稱(chēng)/文本的函數(shù),變量,注釋

  • 變量使用小寫(xiě)字母

  • 如果變量包含多個(gè)名稱(chēng),請(qǐng)使用下劃線。force_redraw。不要使用forceRedraw

  • 對(duì)于C標(biāo)準(zhǔn)庫(kù)的包含文件,請(qǐng)始終使用<和>。例如,# include < stdlib.h >

  • 對(duì)于自定義庫(kù),請(qǐng)始終使用""。例如,# include“my_library.h”

  • 當(dāng)轉(zhuǎn)換為指針類(lèi)型時(shí),總是將星號(hào)與類(lèi)型對(duì)齊,例如。uint8_t* t = (uint8_t*)var_width_diff_type

  • 始終尊重項(xiàng)目或庫(kù)中已經(jīng)使用的代碼風(fēng)格

注釋

  • 不允許以//開(kāi)頭的注釋。總是使用/* comment */,即使是單行注釋
//This?is?comment?(wrong)
/*?This?is?comment?(ok)?*/
  • 對(duì)于多行注釋?zhuān)啃惺褂每崭?星號(hào)
/*
?*?This?is?multi-line?comments,
?*?written?in?2?lines?(ok)
?*/


/**
?*?Wrong,?use?double-asterisk?only?for?doxygen?documentation
?*/


/*
*?Single?line?comment?without?space?before?asterisk?(wrong)
*/


/*
?*?Single?line?comment?in?multi-line?configuration?(wrong)
?*/


/*?Single?line?comment?(ok)?*/
  • 注釋時(shí)使用12個(gè)縮進(jìn)(12 * 4個(gè)空格)偏移量。如果語(yǔ)句大于12個(gè)縮進(jìn),將注釋4-空格對(duì)齊(下面的例子)到下一個(gè)可用縮進(jìn)
void
my_func(void)?
{
????char?a,?b;

????a?=?call_func_returning_char_a(a);??????????/*?This?is?comment?with?12*4?spaces?indent?from?beginning?of?line?*/
????b?=?call_func_returning_char_a_but_func_name_is_very_long(a);???/*?This?is?comment,?aligned?to?4-spaces?indent?*/
}

函數(shù)

  • 每個(gè)可以從模塊外部訪問(wèn)的函數(shù)都必須包含函數(shù)原型(或聲明)

  • 函數(shù)名必須小寫(xiě),可以用下劃線_分隔

/*?OK?*/
void?my_func(void);
void?myfunc(void);

/*?Wrong?*/
void?MYFunc(void);
void?myFunc();
  • 當(dāng)函數(shù)返回指針時(shí),將星號(hào)對(duì)齊到返回類(lèi)型
/*?OK?*/
const?char*?my_func(void);
my_struct_t*?my_func(int32_t?a,?int32_t?b);

/*?Wrong?*/
const?char?*my_func(void);
my_struct_t?*?my_func(void);
  • 對(duì)齊所有的功能原型(使用相同/相似的功能)以提高可讀性
/*?OK,?function?names?aligned?*/
void????????set(int32_t?a);
my_type_t???get(void);
my_ptr_t*???get_ptr(void);

/*?Wrong?*/
void?set(int32_t?a);
const?char?*?get(void);
  • 函數(shù)實(shí)現(xiàn)必須在單獨(dú)的行中包含返回類(lèi)型和可選的其他關(guān)鍵字
/*?OK?*/
int32_t
foo(void)?
{
????return?0;
}

/*?OK?*/
static?const?char*
get_string(void)?
{
????return?"Hello?world!\r\n";
}

/*?Wrong?*/
int32_t?foo(void)?{
????return?0;
}

變量

  • 使變量名全部小寫(xiě),下劃線_字符可選
/*?OK?*/
int32_t?a;
int32_t?my_var;
int32_t?myvar;

/*?Wrong?*/
int32_t?A;
int32_t?myVar;
int32_t?MYVar;
  • 按類(lèi)型將局部變量分組在一起
void
foo(void)?
{
????int32_t?a,?b;???/*?OK?*/
????char?a;
????char?b;?????????/*?Wrong,?char?type?already?exists?*/
}
  • 不要在第一個(gè)可執(zhí)行語(yǔ)句之后聲明變量
void
foo(void)?
{
????int32_t?a;
????a?=?bar();
????int32_t?b;??????/*?Wrong,?there?is?already?executable?statement?*/
}
  • 你可以在下一個(gè)縮進(jìn)級(jí)別中聲明新的變量
int32_t?a,?b;
a?=?foo();
if?(a)?{
????int32_t?c,?d;???/*?OK,?c?and?d?are?in?if-statement?scope?*/
????c?=?foo();
????int32_t?e;??????/*?Wrong,?there?was?already?executable?statement?inside?block?*/
}
  • 用星號(hào)聲明指針變量與類(lèi)型對(duì)齊
/*?OK?*/
char*?a;

/*?Wrong?*/
char?*a;
char?*?a;
  • 當(dāng)聲明多個(gè)指針變量時(shí),可以使用星號(hào)對(duì)變量名進(jìn)行聲明
/*?OK?*/
char?*p,?*n;

結(jié)構(gòu)、枚舉類(lèi)型定義

  • 結(jié)構(gòu)名或枚舉名必須小寫(xiě),單詞之間有下劃線_字符

  • 結(jié)構(gòu)或枚舉可以包含typedef關(guān)鍵字

  • 所有結(jié)構(gòu)成員都必須小寫(xiě)

  • 所有枚舉成員必須是大寫(xiě)的

  • 結(jié)構(gòu)/枚舉必須遵循doxygen文檔語(yǔ)法

在聲明結(jié)構(gòu)體時(shí),它可以使用以下三種不同的選項(xiàng)之一:

1、當(dāng)結(jié)構(gòu)體僅用名稱(chēng)聲明時(shí),它的名稱(chēng)后不能包含_t后綴。

struct?struct_name?{
????char*?a;
????char?b;
};

2、當(dāng)只使用typedef聲明結(jié)構(gòu)時(shí),它的名稱(chēng)后面必須包含_t后綴。

typedef?struct?{
????char*?a;
????char?b;
}?struct_name_t;

3、當(dāng)結(jié)構(gòu)用name和typedef聲明時(shí),它不能包含_t作為基本名稱(chēng),它必須在它的名稱(chēng)后面包含_t后綴作為typedef部分。

typedef?struct?struct_name?{
????char*?a;
????char?b;
????char?c;
}?struct_name_t;

錯(cuò)誤聲明的例子及其建議的糾正:

/*?a?and?b?must?be?separated?to?2?lines?*/
/*?Name?of?structure?with?typedef?must?include?_t?suffix?*/
typedef?struct?{
????int32_t?a,?b;
}?a;

/*?Corrected?version?*/
typedef?struct?{
????int32_t?a;
????int32_t?b;
}?a_t;

/*?Wrong?name,?it?must?not?include?_t?suffix?*/
struct?name_t?{
????int32_t?a;
????int32_t?b;
};

/*?Wrong?parameters,?must?be?all?uppercase?*/
typedef?enum?{
????MY_ENUM_TESTA,
????my_enum_testb,
}?my_enum_t;
  • 在聲明時(shí)初始化結(jié)構(gòu)時(shí),使用C99初始化風(fēng)格
/*?OK?*/
a_t?a?=?{
????.a?=?4,
????.b?=?5,
};

/*?Wrong?*/
a_t?a?=?{1,?2};
  • 當(dāng)為函數(shù)句柄引入new typedef時(shí),使用_fn后綴
/*?Function?accepts?2?parameters?and?returns?uint8_t?*/
/*?Name?of?typedef?has?`_fn`?suffix?*/
typedef?uint8_t?(*my_func_typedef_fn)(uint8_t?p1,?const?char*?p2);

復(fù)合語(yǔ)句

  • 每個(gè)復(fù)合語(yǔ)句必須包括左花括號(hào)和右花括號(hào),即使它只包含1個(gè)嵌套語(yǔ)句

  • 每個(gè)復(fù)合語(yǔ)句必須包含單個(gè)縮進(jìn);嵌套語(yǔ)句時(shí),每個(gè)嵌套包含1個(gè)縮進(jìn)大小

/*?OK?*/
if?(c)?{
????do_a();
}?else?{
????do_b();
}

/*?Wrong?*/
if?(c)
????do_a();
else
????do_b();

/*?Wrong?*/
if?(c)?do_a();
else?do_b();
  • 在if或if-else-if語(yǔ)句的情況下,else必須與第一條語(yǔ)句的右括號(hào)在同一行
/*?OK?*/
if?(a)?{

}?else?if?(b)?{

}?else?{

}

/*?Wrong?*/
if?(a)?{

}
else?{

}

/*?Wrong?*/
if?(a)?{

}
else
{

}
  • 在do-while語(yǔ)句的情況下,while部分必須與do部分的右括號(hào)在同一行
/*?OK?*/
do?{
????int32_t?a;
????a?=?do_a();
????do_b(a);
}?while?(check());

/*?Wrong?*/
do
{
/*?...?*/
}?while?(check());

/*?Wrong?*/
do?{
/*?...?*/
}
while?(check());
  • 每一個(gè)開(kāi)括號(hào)都需要縮進(jìn)
if?(a)?{
????do_a();
}?else?{
????do_b();
????if?(c)?{
????????do_c();
????}
}
  • 不要做沒(méi)有花括號(hào)的復(fù)合語(yǔ)句,即使是單個(gè)語(yǔ)句。下面的例子展示了一些不好的做法
if?(a)?do_b();
else?do_c();

if?(a)?do_a();?else?do_b();
  • 空while循環(huán)、do-while循環(huán)或for循環(huán)必須包含花括號(hào)
/*?OK?*/
while?(is_register_bit_set())?{}

/*?Wrong?*/
while?(is_register_bit_set());
while?(is_register_bit_set())?{?}
while?(is_register_bit_set())?{
}
  • 如果while(或for、do-while等)為空(嵌入式編程中也可能是這種情況),請(qǐng)使用空的單行括號(hào)
/*?Wait?for?bit?to?be?set?in?embedded?hardware?unit
uint32_t*?addr?=?HW_PERIPH_REGISTER_ADDR;

/*?Wait?bit?13?to?be?ready?*/

while?(*addr?&?(1?<13))?{}????????/*?OK,?empty?loop?contains?no?spaces?inside?curly?brackets?*/
while?(*addr?&?(1?<13))?{?}???????/*?Wrong?*/
while?(*addr?&?(1?<13))?{?????????/*?Wrong?*/

}
while?(*addr?&?(1?<13));??????????/*?Wrong,?curly?brackets?are?missing.?Can?lead?to?compiler?warnings?or?unintentional?bugs?*/
  • 盡量避免在循環(huán)塊內(nèi)遞增變量,參見(jiàn)示例
/*?Not?recommended?*/
int32_t?a?=?0;
while?(a?10)?{
????.
????..
????...
????++a;
}

/*?Better?*/
for?(size_t?a?=?0;?a?10;?++a)?{

}

/*?Better,?if?inc?may?not?happen?in?every?cycle?*/
for?(size_t?a?=?0;?a?10;?)?{
????if?(...)?{
????????++a;
????}
}

分支語(yǔ)句

  • 為每個(gè)case語(yǔ)句添加單個(gè)縮進(jìn)

  • 使用額外的單縮進(jìn)break語(yǔ)句在每個(gè)case或default

/*?OK,?every?case?has?single?indent?*/
/*?OK,?every?break?has?additional?indent?*/
switch?(check())?{
????case?0:
????????do_a();
????????break;
????case?1:
????????do_b();
????????break;
????default:
????????break;
}

/*?Wrong,?case?indent?missing?*/
switch?(check())?{
case?0:
????do_a();
????break;
case?1:
????do_b();
????break;
default:
????break;
}

/*?Wrong?*/
switch?(check())?{
????case?0:
????????do_a();
????break;??????/*?Wrong,?break?must?have?indent?as?it?is?under?case?*/
????case?1:
????do_b();?????/*?Wrong,?indent?under?case?is?missing?*/
????break;
????default:
????????break;
}
  • 總是包含default語(yǔ)句
/*?OK?*/
switch?(var)?{
????case?0:
????????do_job();
????????break;
????default:?break;
}

/*?Wrong,?default?is?missing?*/
switch?(var)?{
????case?0:
????????do_job();
????????break;
}
  • 如果需要局部變量,則使用花括號(hào)并在里面放入break語(yǔ)句。將左花括號(hào)放在case語(yǔ)句的同一行
switch?(a)?{
????/*?OK?*/
????case?0:?{
????????int32_t?a,?b;
????????char?c;
????????a?=?5;
????????/*?...?*/
????????break;
????}

????/*?Wrong?*/
????case?1:
????{
????????int32_t?a;
????????break;
????}

????/*?Wrong,?break?shall?be?inside?*/
????case?2:?{
????????int32_t?a;
????}
????break;
}

宏和預(yù)處理指令

  • 總是使用宏而不是文字常量,特別是對(duì)于數(shù)字
  • 所有的宏必須是全大寫(xiě)的,并帶有下劃線_字符(可選),除非它們被明確標(biāo)記為function,將來(lái)可能會(huì)被常規(guī)函數(shù)語(yǔ)法替換
/*?OK?*/
#define?MY_MACRO(x)?????????((x)?*?(x))

/*?Wrong?*/
#define?square(x)???????????((x)?*?(x))
  • 總是用圓括號(hào)保護(hù)輸入?yún)?shù)
/*?OK?*/
#define?MIN(x,?y)???????????((x)?

/*?Wrong?*/
#define?MIN(x,?y)???????????x?
  • 總是用括號(hào)保護(hù)最終的宏計(jì)算
/*?Wrong?*/
#define?MIN(x,?y)???????????(x)?
#define?SUM(x,?y)???????????(x)?+?(y)

/*?Imagine?result?of?this?equation?using?wrong?SUM?implementation?*/
int32_t?x?=?5?*?SUM(3,?4);??/*?Expected?result?is?5?*?7?=?35?*/
int32_t?x?=?5?*?(3)?+?(4);??/*?It?is?evaluated?to?this,?final?result?=?19?which?is?not?what?we?expect?*/

/*?Correct?implementation?*/
#define?MIN(x,?y)???????????((x)?
#define?SUM(x,?y)???????????((x)?+?(y))
  • 當(dāng)宏使用多個(gè)語(yǔ)句時(shí),使用do-while(0)語(yǔ)句保護(hù)它
typedef?struct?{
????int32_t?px,?py;
}?point_t;
point_t?p;??????????????????/*?Define?new?point?*/

/*?Wrong?implementation?*/

/*?Define?macro?to?set?point?*/
#define?SET_POINT(p,?x,?y)??(p)->px?=?(x);?(p)->py?=?(y)????/*?2?statements.?Last?one?should?not?implement?semicolon?*/

SET_POINT(&p,?3,?4);????????/*?Set?point?to?position?3,?4.?This?evaluates?to...?*/
(&p)->px?=?(3);?(&p)->py?=?(4);?/*?...?to?this.?In?this?example?this?is?not?a?problem.?*/

/*?Consider?this?ugly?code,?however?it?is?valid?by?C?standard?(not?recommended)?*/
if?(a)??????????????????????/*?If?a?is?true?*/
????if?(b)??????????????????/*?If?b?is?true?*/
????????SET_POINT(&p,?3,?4);/*?Set?point?to?x?=?3,?y?=?4?*/
????else
????????SET_POINT(&p,?5,?6);/*?Set?point?to?x?=?5,?y?=?6?*/

/*?Evaluates?to?code?below.?Do?you?see?the?problem??*/
if?(a)
????if?(b)
????????(&p)->px?=?(3);?(&p)->py?=?(4);
????else
????????(&p)->px?=?(5);?(&p)->py?=?(6);

/*?Or?if?we?rewrite?it?a?little?*/
if?(a)
????if?(b)
????????(&p)->px?=?(3);
????????(&p)->py?=?(4);
????else
????????(&p)->px?=?(5);
????????(&p)->py?=?(6);

/*
?*?Ask?yourself?a?question:?To?which?`if`?statement?`else`?keyword?belongs?
?*
?*?Based?on?first?part?of?code,?answer?is?straight-forward.?To?inner?`if`?statement?when?we?check?`b`?condition
?*?Actual?answer:?Compilation?error?as?`else`?belongs?nowhere
?*/


/*?Better?and?correct?implementation?of?macro?*/
#define?SET_POINT(p,?x,?y)??do?{?(p)->px?=?(x);?(p)->py?=?(y);?}?while?(0)????/*?2?statements.?No?semicolon?after?while?loop?*/
/*?Or?even?better?*/
#define?SET_POINT(p,?x,?y)??do?{????\???/*?Backslash?indicates?statement?continues?in?new?line?*/
????(p)->px?=?(x);??????????????????\
????(p)->py?=?(y);??????????????????\
}?while?(0)?????????????????????????????/*?2?statements.?No?semicolon?after?while?loop?*/

/*?Now?original?code?evaluates?to?*/
if?(a)
????if?(b)
????????do?{?(&p)->px?=?(3);?(&p)->py?=?(4);?}?while?(0);
????else
????????do?{?(&p)->px?=?(5);?(&p)->py?=?(6);?}?while?(0);

/*?Every?part?of?`if`?or?`else`?contains?only?`1`?inner?statement?(do-while),?hence?this?is?valid?evaluation?*/

/*?To?make?code?perfect,?use?brackets?for?every?if-ifelse-else?statements?*/
if?(a)?{????????????????????/*?If?a?is?true?*/
????if?(b)?{????????????????/*?If?b?is?true?*/
????????SET_POINT(&p,?3,?4);/*?Set?point?to?x?=?3,?y?=?4?*/
????}?else?{
????????SET_POINT(&p,?5,?6);/*?Set?point?to?x?=?5,?y?=?6?*/
????}
}
  • 不縮進(jìn)子語(yǔ)句內(nèi)#if語(yǔ)句
/*?OK?*/
#if?defined(XYZ)
#if?defined(ABC)
/*?do?when?ABC?defined?*/
#endif?/*?defined(ABC)?*/
#else?/*?defined(XYZ)?*/
/*?Do?when?XYZ?not?defined?*/
#endif?/*?!defined(XYZ)?*/

/*?Wrong?*/
#if?defined(XYZ)
????#if?defined(ABC)
????????/*?do?when?ABC?defined?*/
????#endif?/*?defined(ABC)?*/
#else?/*?defined(XYZ)?*/
????/*?Do?when?XYZ?not?defined?*/
#endif?/*?!defined(XYZ)?*/

文檔

文檔化的代碼允許doxygen解析和通用的html/pdf/latex輸出,因此正確地執(zhí)行是非常重要的。

  • 對(duì)變量、函數(shù)和結(jié)構(gòu)/枚舉使用doxygen支持的文檔樣式
  • 經(jīng)常使用\作為doxygen,不要使用@
  • 始終使用5x4空格(5個(gè)制表符)作為文本行開(kāi)始的偏移量
/**
?*?\brief???????????Holds?pointer?to?first?entry?in?linked?list
?*??????????????????Beginning?of?this?text?is?5?tabs?(20?spaces)?from?beginning?of?line
?*/

static
type_t*?list;
  • 每個(gè)結(jié)構(gòu)/枚舉成員都必須包含文檔
  • 注釋的開(kāi)頭使用12x4空格偏移量
/**
?*?\brief???????????This?is?point?struct
?*?\note????????????This?structure?is?used?to?calculate?all?point
?*??????????????????????related?stuff
?*/

typedef?struct?{
????int32_t?x;??????????????????????????????????/*!
????int32_t?y;??????????????????????????????????/*!
????int32_t?size;???????????????????????????????/*!????????????????????????????????????????????????????Since?comment?is?very?big,
????????????????????????????????????????????????????you?may?go?to?next?line?*/

}?point_t;

/**
?*?\brief???????????Point?color?enumeration
?*/

typedef?enum?{
????COLOR_RED,??????????????????????????????????/*!????????????????????????????????????????????????????spaces?offset?from?beginning?of?line?*/
????COLOR_GREEN,????????????????????????????????/*!
????COLOR_BLUE,?????????????????????????????????/*!
}?point_color_t;
  • 函數(shù)的文檔必須在函數(shù)實(shí)現(xiàn)中編寫(xiě)(通常是源文件)

  • 函數(shù)必須包括簡(jiǎn)要和所有參數(shù)文檔

  • 如果每個(gè)參數(shù)分別為in或out輸入和輸出,則必須注意

  • 如果函數(shù)返回某個(gè)值,則必須包含返回形參。這不適用于void函數(shù)

  • 函數(shù)可以包含其他doxygen關(guān)鍵字,如note或warning

  • 在參數(shù)名和描述之間使用冒號(hào):

/**
?*?\brief???????????Sum?`2`?numbers
?*?\param[in]???????a:?First?number
?*?\param[in]???????b:?Second?number
?*?\return??????????Sum?of?input?values
?*/

int32_t
sum(int32_t?a,?int32_t?b)?
{
????return?a?+?b;
}

/**
?*?\brief???????????Sum?`2`?numbers?and?write?it?to?pointer
?*?\note????????????This?function?does?not?return?value,?it?stores?it?to?pointer?instead
?*?\param[in]???????a:?First?number
?*?\param[in]???????b:?Second?number
?*?\param[out]??????result:?Output?variable?used?to?save?result
?*/

void
void_sum(int32_t?a,?int32_t?b,?int32_t*?result)?
{
????*result?=?a?+?b;
}
  • 如果函數(shù)返回枚舉的成員,則使用ref關(guān)鍵字指定哪個(gè)成員
/**
?*?\brief???????????My?enumeration
?*/

typedef?enum?{
????MY_ERR,?????????????????????????????????????/*!
????MY_OK???????????????????????????????????????/*!
}?my_enum_t;

/**
?*?\brief???????????Check?some?value
?*?\return??????????\ref?MY_OK?on?success,?member?of?\ref?my_enum_t?otherwise
?*/

my_enum_t
check_value(void)?
{
????return?MY_OK;
}
  • 對(duì)常量或數(shù)字使用符號(hào)(' NULL ' => NULL)
/**
?*?\brief???????????Get?data?from?input?array
?*?\param[in]???????in:?Input?data
?*?\return??????????Pointer?to?output?data?on?success,?`NULL`?otherwise
?*/

const?void?*
get_data(const?void*?in)?
{
????return?in;
}
  • 宏的文檔必須包括hideinitializer doxygen命令
/**
?*?\brief???????????Get?minimal?value?between?`x`?and?`y`
?*?\param[in]???????x:?First?value
?*?\param[in]???????y:?Second?value
?*?\return??????????Minimal?value?between?`x`?and?`y`
?*?\hideinitializer
?*/

#define?MIN(x,?y)???????((x)?

頭/源文件

  • 在文件末尾留下一個(gè)空行

  • 每個(gè)文件都必須包括文件的doxygen注釋和后跟空行的簡(jiǎn)要描述(使用doxygen時(shí))

/**
?*?\file????????????template.h
?*?\brief???????????Template?include?file
?*/

????????????????????/*?Here?is?empty?line?*/
  • 每個(gè)文件(頭文件或源文件)必須包含許可證(開(kāi)始注釋包括單個(gè)星號(hào),因?yàn)閐oxygen必須忽略這個(gè))

  • 使用與項(xiàng)目/庫(kù)已經(jīng)使用的相同的許可證

/**
?*?\file????????????template.h
?*?\brief???????????Template?include?file
?*/


/*
?*?Copyright?(c)?year?FirstName?LASTNAME
?*
?*?Permission?is?hereby?granted,?free?of?charge,?to?any?person
?*?obtaining?a?copy?of?this?software?and?associated?documentation
?*?files?(the?"Software"),?to?deal?in?the?Software?without?restriction,
?*?including?without?limitation?the?rights?to?use,?copy,?modify,?merge,
?*?publish,?distribute,?sublicense,?and/or?sell?copies?of?the?Software,
?*?and?to?permit?persons?to?whom?the?Software?is?furnished?to?do?so,
?*?subject?to?the?following?conditions:
?*
?*?The?above?copyright?notice?and?this?permission?notice?shall?be
?*?included?in?all?copies?or?substantial?portions?of?the?Software.
?*
?*?THE?SOFTWARE?IS?PROVIDED?"AS?IS",?WITHOUT?WARRANTY?OF?ANY?KIND,
?*?EXPRESS?OR?IMPLIED,?INCLUDING?BUT?NOT?LIMITED?TO?THE?WARRANTIES
?*?OF?MERCHANTABILITY,?FITNESS?FOR?A?PARTICULAR?PURPOSE
?*?AND?NONINFRINGEMENT.?IN?NO?EVENT?SHALL?THE?AUTHORS?OR?COPYRIGHT
?*?HOLDERS?BE?LIABLE?FOR?ANY?CLAIM,?DAMAGES?OR?OTHER?LIABILITY,
?*?WHETHER?IN?AN?ACTION?OF?CONTRACT,?TORT?OR?OTHERWISE,?ARISING
?*?FROM,?OUT?OF?OR?IN?CONNECTION?WITH?THE?SOFTWARE?OR?THE?USE?OR
?*?OTHER?DEALINGS?IN?THE?SOFTWARE.
?*
?*?This?file?is?part?of?library_name.
?*
?*?Author:??????????FirstName?LASTNAME?
?*/

  • 頭文件必須包含保護(hù)符#ifndef

  • 頭文件必須包含c++檢查

  • 在c++檢查之外包含外部頭文件

  • 首先用STL C文件包含外部頭文件,然后是應(yīng)用程序自定義文件

  • 頭文件必須包含其他所有頭文件,以便正確編譯,但不能包含更多頭文件(如果需要,.c應(yīng)該包含其余的頭文件)

  • 頭文件必須只公開(kāi)模塊公共變量/類(lèi)型/函數(shù)

  • 在頭文件中使用extern作為全局模塊變量,稍后在源文件中定義它們

/*?file.h?...?*/
#ifndef?...

extern?int32_t?my_variable;?/*?This?is?global?variable?declaration?in?header?*/

#endif

/*?file.c?...?*/
int32_t?my_variable;????????/*?Actually?defined?in?source?*/
  • 不要把.c文件包含在另一個(gè).c文件中

  • .c文件應(yīng)該首先包含相應(yīng)的.h文件,然后是其他文件,除非另有明確的必要

  • 在頭文件中不包含模塊私有聲明

  • 頭文件示例(示例中沒(méi)有l(wèi)icense)

/*?License?comes?here?*/
#ifndef?TEMPLATE_HDR_H
#define?TEMPLATE_HDR_H

/*?Include?headers?*/

#ifdef?__cplusplus
extern?"C"?{
#endif?/*?__cplusplus?*/

/*?File?content?here?*/

#ifdef?__cplusplus
}
#endif?/*?__cplusplus?*/

#endif?/*?TEMPLATE_HDR_H?*/

原文:https://github.com/MaJerle/c-code-style#structures-enumerations-typedefs

直接來(lái)源:嵌入式大雜燴

文章來(lái)源于網(wǎng)絡(luò),版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系刪除。



關(guān)注【一起學(xué)嵌入式】,回復(fù)加群進(jìn)技術(shù)交流群。



覺(jué)得文章不錯(cuò),點(diǎn)擊“分享”、“”、“在看” 唄!

一起學(xué)嵌入式 公眾號(hào)【一起學(xué)嵌入式】,RTOS、Linux編程、C/C++,以及經(jīng)驗(yàn)分享、行業(yè)資訊、物聯(lián)網(wǎng)等技術(shù)知
評(píng)論
  • 做儲(chǔ)能項(xiàng)目,你是怎么選控制器的?隨著工商業(yè)儲(chǔ)能、電網(wǎng)側(cè)儲(chǔ)能的規(guī)?;涞?,作為儲(chǔ)能EMS“大腦”的嵌入式控制器,直接決定了整套系統(tǒng)的運(yùn)行穩(wěn)定性、數(shù)據(jù)可靠性與項(xiàng)目落地效率。不少?gòu)臉I(yè)者都踩過(guò)類(lèi)似的坑:接口數(shù)量不足要額外加裝擴(kuò)展模塊、戶(hù)外高溫導(dǎo)致設(shè)備宕機(jī)、電磁干擾引發(fā)數(shù)據(jù)丟包、軟件生態(tài)薄弱拖慢開(kāi)發(fā)周期……選對(duì)儲(chǔ)能控制器,核心要盯準(zhǔn)四個(gè)關(guān)鍵維度。首先看接口能力:全鏈路覆蓋,才是降本的核心。一套完整的儲(chǔ)能系統(tǒng),需要同時(shí)對(duì)接PCS、BMS、智能電表、溫濕度傳感器、除濕機(jī)、煙感消防主機(jī),還要連接急停開(kāi)關(guān)、斷路器
    飛凌嵌入式 2026-08-11 08:46 207瀏覽
  • 產(chǎn)品使用18V供電,配套4串鋰離子電池,需要設(shè)計(jì)一個(gè)充電器。因?yàn)檩斎?8V,電池最高 16.8V,壓差僅 1.2V。因?yàn)閴翰钐 J褂瞄_(kāi)關(guān)型的充電控制芯片不穩(wěn)定。嘗試自行設(shè)計(jì)一個(gè)。整體采用分立三極管 + TL431架構(gòu),分4個(gè)功能單元:使能控制回路、限流環(huán)路、TL431 精密恒壓反饋環(huán)路、PNP 功率管主功率輸出回路;實(shí)現(xiàn)完整鋰電池充電邏輯。使能控制回路按鍵按下:5V 電壓經(jīng) R12 (2kΩ) 送入 NPN 管 Q3 基極,Q3 飽和導(dǎo)通,對(duì)地拉低 R1、R2 組成的分壓控制節(jié)點(diǎn)電位;該節(jié)點(diǎn)直
    southcreek 2026-08-07 13:45 519瀏覽
  • 樓宇自控里的“巴別塔”一棟智慧樓宇、一個(gè)產(chǎn)業(yè)園區(qū)里,暖通空調(diào)運(yùn)行著廠商私有協(xié)議,照明系統(tǒng)遵循專(zhuān)屬通信標(biāo)準(zhǔn),變配電、門(mén)禁安防各成體系——設(shè)備間數(shù)據(jù)壁壘森嚴(yán),上位平臺(tái)對(duì)接全靠定制化 “翻譯” 開(kāi)發(fā),不僅成本高企,交付周期也難以管控。這就是樓宇自控行業(yè)多年的痛點(diǎn):協(xié)議林立、封閉林立。而破局的鑰匙,早在30多年前就已經(jīng)寫(xiě)好了——BACnet。作為ASHRAE制定的樓宇自控國(guó)際標(biāo)準(zhǔn)協(xié)議,BACnet是如今全球樓宇自控系統(tǒng)(BAS)互聯(lián)互通的“通用語(yǔ)言”。新風(fēng)機(jī)、冷源群控、變配電、照明、門(mén)禁,凡是需要被樓宇
    飛凌嵌入式 2026-08-10 09:26 292瀏覽
  • 一、方案簡(jiǎn)介在Buildroot構(gòu)建的嵌入式Linux系統(tǒng)中部署Flutter應(yīng)用,主流有兩套成熟的開(kāi)源方案,分別適配不同的顯示場(chǎng)景與開(kāi)發(fā)需求:方案一:flutter-elinux(Sony開(kāi)源方案)由索尼官方維護(hù)的嵌入式Linux Flutter工具鏈,既支持DRM/GBM直接渲染,也兼容Wayland、X11等多種顯示后端,場(chǎng)景適配性更廣。方案二:flutter-pi(輕量級(jí)嵌入器)一款輕量級(jí)Flutter引擎宿主程序,僅基于底層DRM/GBM接口實(shí)現(xiàn)渲染,無(wú)需依賴(lài)桌面環(huán)境,資源占用更低,更
    飛凌嵌入式 2026-08-07 09:34 242瀏覽
  • 做藍(lán)牙音箱的工程師大概都碰過(guò)這個(gè)局面。產(chǎn)品要連手機(jī)放歌,要本地播開(kāi)機(jī)提示音和按鍵音,還要接 App 做配網(wǎng)和狀態(tài)上報(bào)。三件事拆開(kāi),早先的常規(guī)做法是音頻藍(lán)牙一顆料、數(shù)傳藍(lán)牙一顆料、本地播放再掛一顆小 MCU 加一片 Flash。板子越畫(huà)越大,BOM 越算越貴,待機(jī)電流和固件工作量也跟著漲。WT2605C 出來(lái)以后,這套需求可以集成到一顆芯片,就是 WT2605C-32N,該芯片采用QFN32 封裝,4×4 毫米,把音頻藍(lán)牙、BLE 數(shù)傳和 MP3 本地播放三樣全包了。對(duì)藍(lán)牙音箱來(lái)說(shuō),最實(shí)在的好處就
    唯創(chuàng)知音語(yǔ)音芯片 2026-08-06 15:14 420瀏覽
  •        很多人只見(jiàn)過(guò)封裝在SMD外殼里的小尺寸晶振,卻不知道一顆2016、1612甚至1210封裝的微型石英晶振,從一塊巴掌大的石英原礦,到最終能穩(wěn)定起振的成品,要經(jīng)過(guò)十幾道精密工序。它內(nèi)部的石英晶片厚度最薄不到20微米,比普通A4紙的1/5還薄,整個(gè)生產(chǎn)過(guò)程里哪怕0.1微米的誤差,都會(huì)直接廢掉整批產(chǎn)品,這也是小尺寸晶振過(guò)去長(zhǎng)期依賴(lài)進(jìn)口,國(guó)內(nèi)廠商花了十幾年才啃下量產(chǎn)硬骨頭的核心原因。1. 原石定向切割:0.01度的角度誤差都不能有小尺寸晶振的第一步,
    TKD泰晶科技 2026-08-07 08:43 572瀏覽
  • 文:杜杰編輯:侯煜當(dāng)?shù)貢r(shí)間7月28日,美國(guó)特朗普政府落地最新科技封鎖政策,美國(guó)聯(lián)邦通信委員會(huì)(FCC)正式更新《受管制清單》,新增兩大類(lèi)設(shè)備——境外生產(chǎn)的先進(jìn)機(jī)器人設(shè)備、境外生產(chǎn)的聯(lián)網(wǎng)電力逆變器。FCC在官方情況說(shuō)明書(shū)中明確,該類(lèi)境外制造產(chǎn)品,“會(huì)對(duì)美國(guó)國(guó)家安全或美國(guó)民眾的人身安全構(gòu)成無(wú)法承受的風(fēng)險(xiǎn)”。本次新規(guī)設(shè)置明確豁免機(jī)制:經(jīng)美國(guó)國(guó)防部(DoW)、電力逆變器品類(lèi)經(jīng)美國(guó)國(guó)土安全部(DHS)審核并授予“有條件批準(zhǔn)”,認(rèn)定對(duì)應(yīng)設(shè)備品類(lèi)不存在重大安全風(fēng)險(xiǎn),即可獲得準(zhǔn)入豁免。同時(shí)政策嚴(yán)格執(zhí)行新老劃斷原
    華爾街科技眼 2026-08-03 21:28 371瀏覽
  •                                                                        
    廣州鐵金剛 2026-08-06 17:44 226737瀏覽
  • 摘要東莞市恒創(chuàng)連接器有限公司(HCHGCONN)是位于廣東東莞的連接器源頭制造工廠,專(zhuān)注于連接器國(guó)產(chǎn)替代、小間距大電流連接器、線對(duì)板連接器、線對(duì)線連接器、板對(duì)板連接器、電源連接器及定制連接器開(kāi)發(fā)。公司面向工業(yè)自動(dòng)化、新能源儲(chǔ)能、BMS、汽車(chē)電子、AI服務(wù)器、GPU供電、通信設(shè)備、醫(yī)療設(shè)備和智能家居等場(chǎng)景,提供從產(chǎn)品選型、替代評(píng)估、樣品驗(yàn)證到批量交付的一站式連接方案。恒創(chuàng)可支持 Molex、TE Connectivity、JST、Hirose、Samtec 等國(guó)際品牌部分系列的國(guó)產(chǎn)替代評(píng)估。常見(jiàn)替
    HC003 2026-08-07 10:14 255瀏覽
  • 做電池供電攝像頭、可視門(mén)鈴、戶(hù)外安防的同學(xué)應(yīng)該都踩過(guò)這個(gè)坑:攝像頭要拍,ISP、sensor、無(wú)線模塊全得開(kāi)著,整機(jī)電流動(dòng)輒幾百 mA。一節(jié) 18650 撐不了幾天,用戶(hù)投訴“怎么又沒(méi)電了”。有人會(huì)說(shuō):加個(gè) PIR 人體紅外不就行了?問(wèn)題是 PIR 怕熱、怕寵物、怕隔著亞克力/玻璃殼,而且只能感知“有溫差的人體移動(dòng)”,靈敏度飄忽。真正省電的思路應(yīng)該是:讓攝像頭平時(shí)徹底睡死,只有“前面有人/有動(dòng)靜”時(shí)才被一鍵喚醒——而負(fù)責(zé)這個(gè)“看門(mén)”角色的,最合適的是一顆低功耗雷達(dá)。一、為什么是雷達(dá),而不是 PI
    唯創(chuàng)知音語(yǔ)音芯片 2026-08-07 14:44 256瀏覽
  • 導(dǎo)語(yǔ)在現(xiàn)代高速數(shù)字電路設(shè)計(jì)中,信號(hào)的完整性已不僅是理想波形推演,而是一場(chǎng)與物理非理想特性正面博弈的工程實(shí)踐。濾波器芯片作為凈化傳輸鏈路的關(guān)鍵屏障,其核心挑戰(zhàn)在于:能否有效識(shí)別并濾除那些隱匿在電平跳變過(guò)程中的亞納秒級(jí)瞬態(tài)脈沖干擾,這類(lèi)干擾持續(xù)極短,卻足以在高速鏈路中引發(fā)誤觸發(fā)。然而,傳統(tǒng)函數(shù)發(fā)生器受限于采樣率與邊沿速率,根本無(wú)法忠實(shí)復(fù)現(xiàn)如此狹窄且陡峭的異常波形。針對(duì)此困境,德思特TS-AWG7000系列任意波形發(fā)生器以17 GS/s采樣率與50 ps原生邊沿速度,為瞬態(tài)脈沖提供精細(xì)刻畫(huà),配合SPG
    德思特測(cè)試測(cè)量 2026-08-05 14:06 5瀏覽
  • 在物聯(lián)網(wǎng)從“萬(wàn)物互聯(lián)”邁向“萬(wàn)物智聯(lián)”的進(jìn)程中,LTE Cat.1憑借其在速率、成本與網(wǎng)絡(luò)覆蓋之間的完美平衡,正成為中低速物聯(lián)網(wǎng)市場(chǎng)的絕對(duì)主力。隨著2G/3G網(wǎng)絡(luò)的逐步退網(wǎng)以及新國(guó)標(biāo)對(duì)終端設(shè)備智能化、定位功能的強(qiáng)制要求,Cat.1模組迎來(lái)了爆發(fā)式的增長(zhǎng)窗口。在這一關(guān)鍵節(jié)點(diǎn),基于華為海思Hi2131芯片設(shè)計(jì)的LTE Cat.1模組,憑借其在能效、射頻、架構(gòu)及物理規(guī)格上的底層創(chuàng)新,成功打破了“高性能必高功耗”的傳統(tǒng)魔咒,為行業(yè)提供了極具競(jìng)爭(zhēng)力的連接最優(yōu)解。核心技術(shù)優(yōu)勢(shì):重塑Cat.1能效與連接標(biāo)桿海
    用戶(hù)1778981989717 2026-08-05 21:04 211瀏覽
  • 讓微弱脈沖信號(hào)更清晰——鎖相放大器集成Boxcar平均器在脈沖激光、泵浦-探測(cè)、時(shí)間分辨光譜、飛行時(shí)間質(zhì)譜等實(shí)驗(yàn)中,真正需要測(cè)量的信號(hào)往往只出現(xiàn)在一個(gè)很短的時(shí)間窗口內(nèi),卻被淹沒(méi)在遠(yuǎn)大于它的噪聲和背景之中。 針對(duì)這類(lèi)穩(wěn)定重復(fù)的微弱脈沖與瞬態(tài)信號(hào),賽恩科儀為OE2052雙通道數(shù)字鎖相放大器帶來(lái)全新的Boxcar Averager功能升級(jí):在鎖相檢測(cè)之外,進(jìn)一步提供從周期波形觀察、門(mén)控測(cè)量到多周期平均的完整數(shù)字Boxcar測(cè)量鏈路。 Boxcar平均器,如何從噪聲中“截取”目標(biāo)信號(hào)?Boxcar平均器
    SSI_賽恩科儀 2026-08-07 15:49 40346瀏覽
我要評(píng)論
0
點(diǎn)擊右上角,分享到朋友圈 我知道啦
請(qǐng)使用瀏覽器分享功能 我知道啦
主站蜘蛛池模板: 阿里巴巴与四十大盗| 商务旅行戴帽子的老板同行电影完整版| 大江大河2免费全集观看| 漂白免费看| 酒店1-90集免费观看中文| 魔术快斗02| 天空战记国语版| 满天星版《荒岛女儿国》 | 女保险公司推销员8| 无人高清电视剧| 耙怎么读| 超速绯闻短剧在线观看免费完整版| 小公主苏菲亚第二季免费观看 | 降妖伏魔之定海神针| 公之浮中2| 赤狐书生免费观看全集| 妈妈职业5| 垃圾桶披萨| 小贤和橘子今天的最新视频| 我心里有危险的东西| 绝世武功 微电影| 私人航空未删减版在线观看免费 | 《流星花园2》在线观看| 少女がおしっこをする| 2对一商务服务| 杨鸣曾数次起诉离婚| 如意芳华短剧免费观看| 半是蜜糖半是伤免费观看在线| 甄嬛传49| 农民伯伯下乡记| 第八感剧集电视剧| 《疯狂动物城1》免费完整版| 欧式少女1-13集全剧情 | 绝世天帝| 《宝莲灯前传》电视剧| 安拉拉斋电影版免费看| 年轻的瘦了3| 日本一本到道免费| 最后一条美人鱼| 朋友的男朋友中字ID| 长安三万里免费观看完整| 鬼骨场国语| 离开的时候 黄丽玲| 建议取消强制自动续费| 男女愁愁免费看| 惊天危机高清| 九品芝麻官免费| 堕落的女律师| 学园默示录第一季| 浪漫女家教在线电影| 新保姆进2ED4| 灯草和尚 bt| 莫莉3特别酒店午夜| 多人运动网站无限观看| 《活着》电影完整版| 宋慈韶华录电视剧免费观看| 小巷人家电视剧免费观看| 女警被黑人强伦轩电影| 美丽的小蜜桃4中国版演唱者是谁| 防雷接地方案| 谭晶远情| 我是刑警免费高清播放在线观看| abo成结动画模拟观看| 守护者联盟| 跑男第三季在线观看| 年善良的子11| 电影心灵奇旅| 《瓜达卢佩的玫瑰》免费观看| 爱情真善美全集80| 杰西简壮志凌云高清无删减| 来不及说我爱你免费观看完整版| 牙医姐妹赤子板栗无删减版电视剧| 大突围在线观看完整版| 流氓也识女人香| 毕打自己人粤语全集| 她的紧致让他闷哼出声电影| 《需要爸爸种子》英文翻译| 带我飞 林志玲| 食物链2电影免费观看全集高清| 妈妈出轨了韩剧结局| 控制美女老板遥控器在线看| 罪恶黑名单第一季| 京香在线| 恩娇韩剧电影完整版免费观看| 亮剑的主题曲| 朴海镇李泰兰| 昆池岩在线观看免费高清恐怖片段| 凯登克罗斯主演作品在线播放| 坎贝奇品味人生在线免费观看| 坎贝奇《品味人生》播放| 高中英雄们| 律师禁欲| 杀破狼贪狼免费观看| 拿下丈夫的下属| 《陪部长出差的HR》| 狙击蝴蝶电视剧免费观看完整版| 莫莉特别酒店| 新版聊斋| 大江大河2免费完整版在线观看| 古剑奇谭未删减版有什么区别 | 男按摩师电影院| 碟中谍1未删减版资源| 中字和丈夫的下属相处之道| 阿嬷爱国版歌曲| 《性的暴行》未删减版| 美人鱼电影| 老公部下是我的初恋| 秋蝉免费全集| overflow第一季全集樱花观看| 你的微笑很美电视剧免费观看| 斗龙战士3龙印之战免费观看| 黑帮大佬我和我的365第二部| 请君入眠全集免费观看| 永定县| 高清《法国空乘1》| 正在播放:丈夫不在家的5天之间,被命令禁欲直到初夜为止的我身心都被性豪的公 | 《越南被俘女兵》| 不输男儿:将门嫡女短剧全集| 特种兵之火凤凰62| 热情邻居| 独刺电视剧全集36集免费观看| 做aj的电视剧大全免费观看中国| 凉宫春日2009| 打扑克免费视频| 苍井空电影网| 《爱我几何》完整版原版| 《庆余年2》第107集| 修理工的欲望电影| 包公奇案| 完美邻居| 电影观看免费观看完整版高清| 和部长出差旅电视剧免费观看| 高清《婚前试爱》罗仲谦周秀娜| 分手大师 电影| 冰河剧场亲爱的老师| 一生一世电视剧免费观看西瓜影音| 美妙发型屋1| 幻影忍者动画片| 晚娘2| 单身地狱第四季免费观看| 祥仔视觉| 丢作业的秦朗家人回应| 要帅气的生活剧情介绍| 科学怪人的新娘| 而立之年片尾曲| 禁忌4年转一代禁忌| 男子火车上拒换座被辱骂| 上司的强迫电影| 《同居1ldk》番剧动漫观看免费| 妓女院的中国姑娘在线观看| 《八佰》电影免费观看| 萌学园之萌骑士传奇全集| 绝代双骄梁朝伟版粤语| 鬼吹灯之怒晴湘西| 战狼6欧美版免费观看完整版国语在线 | 《销售秘密2》在线观看| 非洲和尚| 牝教师~淫辱的教室| 大兵日记全集| 东方之珠国语| 以家人之名免费播放| 万物生长| 时光正好连续剧| 行尸走肉第三季09| 私人女子监狱法版剧情介绍| 猫和老鼠东北方言版| 黑白配国语在线播放免费观看| 刻在你心底的名字免费观看完整版| 混血美女按摩视频在线观看| 泰国电影晚娘2| 伦理《私人护士》| 毒枭墨西哥第二季| 魔道祖师免费动漫| 东条夏电影在线观看免费版韩剧| 中二病也要谈恋爱12| 刘谦魔术揭秘2013| 长沙电视台政法频道| 南洋十大邪术 电影| 第六感之吻电视剧在线观看| overflower第一集完整版 | 法国高压监狱伦理片| 半斤八两动画片全集| 19岁免费观看国语版| 人肉市场电影| 新金平瓶梅| 周二谋杀定律全集观看| 玉蒲团2玉女心经| 女教师引诱12| 韩国爱情电影免费在线看完整版| 弟弟的女友 电影| 别打扰我读书电视剧结局免费观看| 酒店1-5集全集| 悬崖百度影音| 新上任的秘书和上司谁演的| 中国油价处在世界什么水平| 详情: 解决学生的性爱烦恼不穿内衣裤的美波老师硬硬教学 _美波汐里 - 91n | 爱情真善美全集80| 韩国夫妻交换| 绽放电视剧全集免费观看| 坎贝奇无憾全集码名| 哪吒在线观看| 入室暴行魔电影免费观看高清 | melody 女超人在线| 阳光之下在线观看| 《大兵的寝室》电影完整版在线观看 | 美国伦理电影需要爸爸播种| 波多野结衣教师系列精品| 韩国电影需要爸爸播种子 | 阳朔县| 桃花请缨免费看全集 | 糖醋蒜的制作方法和配方10斤| 动感之星小玲236集完整版免费观看下 | 西游记原版| 插曲的痛60全集免费观看高清版| 全城热恋20130929| 我是特种兵火凤皇| 酒店1-5集在线观看免费版下载 | 了不起的夫人第一季全集| 港片在线观看免费完整版影院| 陈丽君李云霄经典唱段| 少年 电影| 怒火重案| 老婆爱上我免费版观看电视剧| 强吻还拉丝| 上海风云2| 嘉祥县| 困惑的浪漫电影| 保罗和雪莉一家第一部| 电视剧母亲的战争| 杰西简的电影在线播放| 小公主苏菲亚国语版| 三年中国在线高清观看观看| 苗圃和李亚鹏| 战狼6高清版下载| 一代女皇武则天| 电影《生活中的玛丽》免费播放导演| 公民凯恩电影| 高贵人妻被义子侵犯| 命悬一枪电影| 别墅轮换5攻略免费| 幸福爱人电视剧全集| 《最高の爱人诏》演员介绍| 非亲父子演员表| 需要爸爸的播种电影| 机器总动员| 插曲30分钟电视剧免费观看| 万湖会议电影| 年轻丰满的继牳3伦A片201| 布衣神相粤语高清| 农场保卫战在线观看| 狼烟遍地大结局| 瓜达卢佩的玫瑰观看| 韩国剧《爱上闺蜜》| 危险关系免费完整版观看| 蔷薇风暴电视剧在线观看高清| 广场舞黄玫瑰| 陈丽君李云霄经典唱段| 电车魔女| XL司令第一季免费全集在线| 御岭秘录电影免费观看| 爱在几何电影完整版免费观看| 林一的未来全集免费观看动漫| 禁忌1980满天星帕克| 一起去看流星雨大结局| 我朋友的瘦子9| GAY取精潮喷10次龟责到哭| 特殊的按摩方式医院急诊室| 高清《亲爱的》在线观看电视剧免费| 势不两立电视剧全集| 农场主的女儿们 经典973蘑菇| 痛30插曲全集免费播放| 佐佐木希av作品| 特殊保险推销员中字| 画皮2电视剧全集| 酒店1一80集| 天若有情3粤语| 锵锵锵锵锵锵锵锵免费观看电视| 绅士和小姐| 白绳牙医在线观看免费全集下载 | 沙漠行动2满天星版2023最新版本介绍| 神印王座免费完整观看| 韩剧办公室蓝色隐身帽子动漫| 湖北经视直播在线观看| 《她被搬运工侵犯》中文| 没有秘密电视剧| 法国护士长免费在线观看| 泽塔奥特曼第十集| 牙医姊妹在线观看免费高清| 《你是我兄弟》结局| 《美景之屋6》_完整在线观看免费观看| 我和我的男人们| 需要爸爸来播种在线观看完整版中文版| 高清一级方程式:疾速争胜 第八季| 站着再来一次第26| 雄狮少年2电影免费完整版| 逃狱犯入室暴行电影免费观看 | 3对一在线观看| 我独自升级动漫第二季| 锵锵锵免费完整观看在线观看电影 | 电影《爱与自由》在线观看免费| 铸匠电视剧| 夫妻的世界完整版| 康斯坦丁电影高清在线观看完整| 《部长出差的日子》免费观看| 筋膜黏连| 呕吐娃娃屠宰场免费观看| 天雷一部之春花秋月 电视剧| 大江大河3免费观看下载| 仙逆113集在线看| 火山口上的2人| 寻找魔鬼| 《入室暴行3被蹂躏》在线观看 | 后厨免费观看全集| 安新县| 西游降魔篇罗志祥| 优秀女巫贾斗心| 一吻定情动画版| 想爱就爱2.5| 风铃动漫在线观看完整版与| 亮剑李幼斌版| 售楼小姐的秘密艺术片| 假面骑士01全集免费观看完整版| 《娃娃脸3》电影| 年轻的大胸继拇日本| 世上只有妈妈好免费观看第一集| 《为卿痴狂2》曹查理| 美女拳击赛| 堂吉诃德动画片| 一路向西高清ed2k| 淘宝最近怎么了| 乡村爱情4在线观看| 隐形的亿万富翁电影免费| 暴雨侵犯七天我失去理智日本| 不日成婚| 啄木鸟《劳拉的遗产》叫什么| 人头移植| 麦乐迪家庭矛盾播放| 鹿晗脸上的疤| 双人调情按摩在线观看网站| 开门红扇子舞| 妈妈的职业2完整版观看免费高清| 魔法咪路迷路| 电影聊斋兰若寺免费播放| 致命弯道六| 斗罗大陆177| 小早川玲子电影| 在韩国成为房主的方法全集观看| 木子檀檀子电影免费看高清| 电视剧康德第一保镖传奇| 沙龙美容服务| 花样男子全集| 法航空姐3| 《比基尼勇士》动漫| 玩命追踪在线观看| 秋儿自驾旅行最新视频| 千与千寻免费| 金庸武侠世界免费观看| 剥茧电视剧免费全集在线观看| 强奸上门女教师在线视频| 关东棋王| 牙医赤子板栗完整版| 中华小子第二部全集| 巜人妻初次按摩2电影| 中国家庭第一部下载| 千金女贼 电视剧| 迷航昆仑墟| 莫小棋三级| 猪猪侠之超星五灵侠3| 好想好想和你在一起| 耍要爸爸播种子| 你给我的喜欢1-24全集免费| 姐妹牙医电影在线看完整版高清| 特利迦奥特曼全集免费观看| 维修人员的培训 在线| 因为爱情有晴天国语| 销售的秘密| 美丽的小蜜桃4中国版演唱者是谁| 美国式保罗4免费| 女超人,麦乐迪| 急诊护士电影免费观看完整版| 大熊和熊二全集免费观看| 近距离爱上你电视剧全集在线观看| 疯狂炒作团台词| 十七岁电影完整版| av无| 高清留存的爱未删减| 公与3个媳HD在线| 意大利种马| 朝国的继4| 《氪金玩家》动漫在线观看| 教训美女| 特殊的滋味在线观看视频| 代号麻雀| 农场保卫战满天星完整版| 八十年代15首歌曲| 《壮志凌云:满天星》| 无法传达给你在线观看日剧| 七彩祥云烟花多少钱| 一个好妈妈的D6申字| 点燃我温暖你电视剧在线| 韩国《维修工的艳遇》| 一世清欢短剧在线观看| 哇嘎高清电影在线播放| 每日妈妈粤语| 阿坝一家人电视剧在线观看| 夜空中最亮的星电视剧| 我的妹妹不可能那么可爱h| 凯登·克劳丝-Kayden壮志凌云| 三星手机广告曲| 孙菲菲我是娱乐圈霸凌事件亲历者| 美味的岳 在线观看| 开心鬼放暑假粤语版| 南极大冒险电影完整版免费观看| 玉女聊斋之陆判性经| 由森奈奈子领衔主演| 血肉之花 图解| 亲嘴视频大床视频全部| 红高梁电视剧| honeygirl| 色情电影瓜达卢佩的玫瑰| 爱你所以离开你| 李克勤个人资料简介| 大道通天电视剧全集| 广州百万葵园| 酒店1-80集| 广场舞社员都是向阳花| 美国特别酒店2免费| 黑盒子台剧在线观看| 曼娜第二部免费观看完整版| 东宫西宫下载| 长月无烬电视剧免费观看| 玄女心经3高清| 梦魇绝镇第二季在线观看| 女狱警被躁BD在线观看| 原来是老师啊动漫| 盒子里的猫| 三年大片大全免费国语版在线播放| 忒弥斯的不确定法庭| 私人航空电影完整版免费观看| 庆余年2电视剧在线免费观看 | SAO浪受的饥渴日常生活| 连续剧黑狐| 蓝男色蓝摄GAY裸男CHINA| 壮志凌云2法国满天星播放技巧| 阿罗汉国语| 混血儿摇篮曲1973正版播放| 一个女被3个男人轮流打耳光| 1对3电影| 少年王卫斯理高清| 斗罗大陆在线观看218| 姐妹牙医在线观电影| 韩国电影免费观看高清完整版在线| 1995版泰山珍妮在线观看播放 | 壮志凌云2011满天星观看| 迪迦奥特曼大全集| 二人转 搞笑| 警察锅哥播放电视剧一共40集| 遇见你之前| 女版《西部通缉令》电影在线观看 | 危险旅程| 张婉悠电影| 胜利在线| 玉米电影| 还珠格格新版全集免费观看| 豪门弃少全集免费| 白嫖者联盟免费观看完整版电视剧| 暗香 电视剧| 水浒传86| 凤凰腾演员表| 奥特曼大电影国语| 朝国年经继拇2| 我的主夫男友电视剧免费观看| 美国禁忌11| 特战荣耀免费观看| 海员记录在杜苏芮影响下航行遭遇| 赤板栗牙医电影观看| 少林寺传奇4| 电视剧大地恩情| 蜡笔小新3| 陆贞传奇电视剧在线观看免费全集| 利亚高蒂满天星电影| 泰山恩仇| 男乒乓球团体赛决赛直播| 大姨姐的滋味| 美丽小蜜桃2免费观看完整版全集| 《私人女性监狱》HD| 七夜的许愿星基拉祈| 怡红院怡春院| 美乃雀免费看| 金钱追杀令| 半是蜜糖| 雪豹之特战出击| 成熟的女人免费观看电视剧| 爱我几何电影完整版在线播放免费观| 暗红1936高清全集| 高清《女学生3》在线观看| 大学生在线观看4| 我们推理第三季在线观看| 《贝拉8》完整版| 《谍战深海之惊蛰》电视剧| 末日村庄电影完整在线观看| 《部长出差的日子》中字| 年轻的母亲5 免费完整版中文版| 小飞象电影| 美国电影《小辣椒》高清全集| 黑鸭子电视剧全集| 我们都是坏孩子电影| 韩国电影爱人下载| 杨门寡妇肉床电影完整版| 年轻的瘦子最新版免费观看| 变形警车珀利| 逆天改命:锦绣嫡女短剧全集| 免费A1片| 点燃我温暖你更新时间| 王多鱼打扑克| 凄辱护士bd高清日本电影免费看| 只是结婚的关系免费观看西瓜| 成全免费视频在线观看| 禁室培欲之爱的俘虏| 田姐辣妹电视剧全集免费播放| 莫言的反国言论| 韩国电影医生高清完整版在线观看| 吴健版农民伯伯2集在线看| 斗罗大陆全集在线看高清| 齐天大圣孙悟空免费观看完整版| 蛇姬恋| 宾利欧陆gtc| 保罗一家1--4美国版| 春心荡漾在线观看完整版| 课外授业3在线| 把儿媳妇变成花痴了第二季全集 | 电影斗牛剧情| 快青8cj| 莫妮卡版《爱我几何》在线| 精忠岳飞电视剧全集40| 局内人韩国电影| 心悸mv| 花样男子韩版百度影音| 色九月| 九九电视剧| 三国陈建斌版国语免费观看| 在线维修工的艳遇| 凹凸世界4季全集免费| 傈僳族怎么读| 保姆的特殊待遇2未删减版 | 女员工的付出 中文| 叛逆者1-42集完整| 绝品赘婿出山冷笑天电视剧在线观看 | 俄罗斯女儿国2在哪看| 高清《失窃的女孩》电视剧 | 妻子的秘密教学动漫| 我的巨乳继母| 好兆头高清在线观看| 仙逆104| 麦乐迪和父亲争执电影| 中国远征军 下载| 工程车视频大全动画片 | 月光宝盒免费版观看| 八仙饭店伊波拉病毒| 黑暗荣耀第二季网盘| 潜伏完整版电视剧免费观看| 变形记20120202| 昌黎二中| 《公的浮之手中字》2023| 驱魔龙族马小玲免费观看| 萌宝下凡短剧免费观看| 82板杨敏思版本1-5电视剧免费观看就是| 洪武大案电视剧| 上海一家人电视剧全集在线观看| 电器维修工的艳遇2| 短剧免费看全集| 男童眼里捉6条活虫| 回复术士的重启人生在线观看高清| 年轻的嫂2| 需要爸爸种子-在线追剧 | 恶作剧之吻1台湾版| 《爱我几何》原版免费观看| 3d肉蒲团中文字幕| 佳期如许| 三年大片三年大全免费观看国语 | 秘密花园ost| 绝世龙尊短剧免费看| 泰国小姑娘中文版| 九重紫电视剧在线观看免费完整版| 关东微喜剧| 别墅换妻视频| 老爸102岁| 个人取向全集| 高压监狱飞机版| 妈妈百度影音| 怒剑狂花| omoflow第一季全集在线播放| 犯了规短剧| 极致爱抚 1| 美景之屋6:我的完美人生免费观看完整版 | 砍贝奇品味人生| 择天记第三季| 波拉特下载| cekc每1| 青面修罗电影高清在线观看免费 | 鉴宝弃少:捡漏暴富全集免费| 人民的名义 直播| 我不过是个大罗金仙动漫免费观看| 多大的雪才算暴雪| 宁南县| 谋杀第二季| 高考一段线二段线什么意思| 愁愁愁电视剧高清免费观看| 七姐妹电视剧免费观看全集在线| 动漫烟花| 京香在线播放| 图书馆女朋友动漫第一季观看 | 坎贝奇无憾全集码名| 《原始人》电影免费观看| 麦乐迪的女超人在线观看完整免费 | 搜查瑠公圳未删减| 在暴风雨时分| 女老师5| 欲望酒店 影音| 闪电五连鞭| 双人精油按摩调情刺激阴茎高潮伦理免费电影| 吴磊和吴京是父子吗| 趣怪守护仙| 尺度较大的外国爱情电影和女部长一起出差 | 三d肉蒲团在线观看| 一只跳蚤的自传1976年版| 十九岁电影高清完整版| 年轻的母亲1在线播放| 河南一家6口被杀 警方通报| 站着再来一次26集全集免费播放| 空中的梦想家| 幸福媳妇成长记电视剧全集| 《妻子偿还》| 金瓶玉2之性奴| 《黑帮少爷爱上我》在线观看| 无法无天满天星完整版| 《亦舞之城》电视剧| 电视剧夏妍的秋天| 入室暴行2免费观看完整版| 马头琴曲| 妈妈的男朋友5线观看 高清| 娃娃脸 4| 掩耳盗铃电影| 正方体怎么画| 影子的诅咒电影在线观看| 沧元图第2季免费观看| 85老版隋唐演义电视剧| 两女打架| 女超人麦乐迪在线完整版免费观看视频 | 超凡蜘蛛侠2在线观看| j情丛林| 西游记之大闹女儿国| 金梅瓶2 国语在线播放| JiZZ日本| 壮志凌云综艺| 上瘾第二季| 《女超人:麦乐迪》在线播放| 斗罗大陆116集| 天使的3d动漫| 叶咲ゆめ| 《勇敢的老师》正版观看| 目迷五色是什么生肖| 宇佐美舞| 韩剧《为爱疯狂》| 青春环游记第二季综艺| 韩国电影我的朋友他的妻子| 美式忌讳5--8| 消失的孩子 电视剧| 人民的名义 电视剧| 激战酒店全集免费看| 影视工厂tv电视版下载| 圣斗士星矢欧米茄| 我的姐姐是电影免费观看全集| 景甜曾说经历无法承受之痛| 翁虹所有电影| 一眉道人国语高清| 罗丽·星克莱尔电影在线观看 | 环翠峪门票| 瓜达卢佩的玫瑰免费在线观看| 猪趴大联盟| 选了戴蝴蝶面具的妈妈作者是谁| 母亲爱上儿子同学的台湾剧| 福禄寿放暑假粤语| 电影窗外| 象山县| 电视剧仁心俱乐部分集剧情 | 高压监狱完整版免费观看| 坎贝奇《品味人生》青柠| 《棋魂》免费观看全集电视剧| 《今天的她们》电视剧| 金牌售楼销售的秘密5HD中字| 梅西现身迈阿密超市| 信任 陈奕迅| overflower第一集完整版| 韩国x档案| 老爸的爱情全集| 星际之门亚特兰蒂斯第四季| 意大利法国空乘4中字| 三级日本高清完整版热播| 舞出我人生2迅雷下载| 金银瓶2008版徐少强| 爱的精灵下载| 北上在线观看完整版免费高清| 麦乐迪女超人在线观看| 莲花楼连续剧40集高清| 《小唐璜情史》| 卷土重来电影| 电影《美味快递员的特殊待遇》免费| 电视剧名校| 宇宙天魔完整版国语在线观看高清| 战狼6大牛免费观看全部| 鱼锅饼子| 法政先锋第三部粤语| 圣女贞德电影| 不良义姐在线观看免费| 爱的创可贴结局| 游客在瓦屋山被落石砸中身亡| 法国高压监狱| 游戏风云春晚| 《以法之名》全集1_36| 澳门风云3西瓜| 支配教坛在线观看动漫免费| 新菜主演的全部电影| 簧片网址大全| 女律师替夫还债电影| 电视连续剧剑谍| 长江七号电影免费完整版在线观看 | 看了又看第三部| 泰国电视剧美人计| 《美容院1:特殊待遇》在线观看| 诱人的飞行 迅雷下载| 猛鬼村电影完整版免费观看| 青春期1完整版| 《社长夫人的美貌》全集免费资源| 直击运20掠过雪山绝美场面| 樱花动漫后宫露营| 119纳粹集中营电影| 成龙免费高清大全在线观看| 斗破苍穹第175集免费播放| 仓井老师的电影| 金刚驱魔师第一季免费观看全集| 策驰影院电视剧免费策驰电影| 火影忍者在线观看免费全集| 放荡女2| 兵变1938| 闫凤娇 第二季| 简单爱伍佰| 卢旺达的玫瑰电影在线播放 | 珠帘玉幕电视剧在线观看| 《娃娃脸3》电影| 长跑呼吸| 消失的子弹 下载| 法国满天星《蛇妖》| 高清午夜之花未删减| 哈利波特1普通话版| 红海行动免费观看完整| 卖房子的女销售在线看 | 我的1997免费观看完整版| 《八尺夫人》意大利电影完整版免费 | 美版咒怨1| 成全观看免费完整观看动漫 | 韩国电影姐姐免费完整版| 《家庭矛盾》4麦乐迪| 我的吸血怪好友| 巴基斯坦地图中文版| 电影末路| 老婆的同学中字ID| 法医秦明免费全集观看| 判处勇者刑全集观看| 瞄准电视剧60集免费观看| HD版泰山《激战丛林》中文完| 沧元图全集免费观看| 法网柔情剧情| 迈克杰克逊的演唱会| 《禁忌》大结局剧情| 阳光灿烂的日子百度影音| 恐龙之恋泰剧| 迷幻学院| 正在播放《美女家教的高清》手机在线免费观看_奇优影院手机版 | 返老还童的电影| 坎贝奇无憾人生免费| 电影少女的诱惑| 天巡者电视剧在线观看免费| 美丽的海棠红5| 美味快递员特殊待遇2在线观看免费高清 | 神话片头曲| 撸二哥| 替身演员:逆袭成影后全集免费| 看了又看第三部| 误判粤语抢先版在线观看| 《诱人的女房东》| 钻石王牌 第四季| 老师好在线观看| 小猪佩奇爆笑版视频| 荣誉守则2012h版链接| 不够相爱的我们短剧| 《赘婿》| 猪坚强已瘦骨嶙峋| 销冠的秘密3在线观看| 不知火舞vs外星人之h| 都市后宫艳妇全部阅读| 肢解狂魔| 寂寞的人妻水电工维修 | 遍地狼烟下载| 流浪汉电影| 台北101大楼亮灯祈愿| 吗吗吗朋友| 现在的是哪一个多闻! ?| 咱们结婚吧28| 张开印ko蓝桑坤| 修理工的艳遇免费观看| 第十大道和狼| 源代码在线观看| 潜规则 电影| 韩剧朋友的母亲 双字id| 铁血少年| 黑暗侵袭1高清| 世界第一的初恋第一季| 神奇布偶2控制女老板| 爱让我们在一起大结局| 巡回检察组43| 祝福祖国歌谱| 空乘2023法版在线观看| 寄生兽灰色部队| 德云社2018封箱| 全球最让人害羞的时装比赛| 美国式保罗讳2| 日本电影与讨厌的部长出差| 野花社区最新免费观看| 谁的青春不乱爱| 爱在空气中特别篇| 麻花mV无痕| 大年三十去哪儿了| 《偿还3》完整版| 连续剧樱桃| 韩国三级片有求必应| 竹茹橘皮汤| 茜拉 洋葱| 妖精的尾巴15| 年轻的小婊一级A片免费| 东区女巫| 怎么哪个景区看起来都像有1亿人| 布衣神相国语全集| 私人航空| 电影需要岜爸播种子| 绝世红颜| 恐怖大师| 霹雳战元史之天竞鏖锋| 高压监狱1小时45分是什么意思| 捉奸趣事| 妈妈再爱我一次电影高清|