C雜項_190117

分層

要具有一定的分層意識?。。『瘮?shù)用起來千萬不要瞎調(diào)用,而且不同的硬件之間的連接關(guān)系一定要明確


memcpy處理int類型

拷貝普通的char類型是沒問題的,但是int型就需要仔細(xì)考慮一下了,一個占4位而不是1位;


scanf使用

需要加取地址符?。?!


輕度算法問題

遇到算法問題,一定要思路清晰,先分解問題,單獨構(gòu)造需要的每一個函數(shù),最后再統(tǒng)一調(diào)度


宏定義加U

#define mark01    1u

上述的1u即表示無符號的1,u為unsigned的意思,這種語法應(yīng)該是用于宏定義和運算中居多,定義賦值時通常不用


struct和typedef

struct STUA{
    int st1;
} STA;
//STUA為結(jié)構(gòu)體類型名--星體,STA為具體結(jié)構(gòu)體名--地球
typedef struct STUB{
    int st2;
} STB;

void main()
{
    
    struct STUA sup1;
    struct STUB sup2;
    STA supa1;//會報錯,此種方法不可用
    STB supb2;//可正常使用
    STA.st1 = 1;//可正常使用
    STB.st2 = 2;//會報錯
    //res = get_area(0,0,1,1,-1,-1,3,3);
    printf("%d %d\n ",STA.st1,sup1.st1);
}

typedef的struct在用的時候會有一定的省略,用法也稍有不同
加了typedef的struct STB具有了類似結(jié)構(gòu)體類型名稱的屬性,可以直接用STB supb2的方法來定義,但是不具有了具體結(jié)構(gòu)體名的屬性,不能夠使用STB.st2直接賦值


ifdef三連

#ifndef  TRUE
#define  TRUE     1
#endif

函數(shù)用作參數(shù)

初步總結(jié)
1.只要用函數(shù)作指針,或要使用函數(shù)作參數(shù),均需要定義一個指針函數(shù),返回值類型和參數(shù)要和實體函數(shù)完全相同,用來在具體使用中(實際主函數(shù)調(diào)用或結(jié)構(gòu)體定義)替代實體函數(shù),通常描述為typedef void (*pfunc)(int a,XXX)
實例如下圖
.h

typedef void (*rec_u)(uint8_t *msg, uint16_t len);//描述函數(shù)參數(shù)類型

.c

static void UDP_Receive(uint8_t *msg, uint16_t len)//函數(shù)實體
{
  XXXXX
}
uint32_t CreateSocket(const char *ip, uint16_t port,rec_u readcb)//調(diào)用函數(shù)中的函數(shù)參數(shù)類型描述
{
  XXXXX
}
void main()
{
  ret = CreateSocket("3.0.4.3", 83, UDP_Receive);//主函數(shù)調(diào)用
}

?。?!如果直接用函數(shù)UDP_Receive()做參數(shù)如下圖

CreateSocket("3.0.4.3", 83, UDP_Receive())

則是用返回值做參數(shù)哦,含義大不一樣


函數(shù)用作結(jié)構(gòu)體內(nèi)容的應(yīng)用描述

.h文件
描述結(jié)構(gòu)體,定義函數(shù)一律用指針類型

typedef void (*rec_r)(T_Mode mode, uint32_t msgId, TUri uri, uint8_t *msg);//指針
typedef void (*rec_u)(uint8_t *msg, uint16_t len);
typedef struct st1
{
  uint8_t used;           
  uint8_t socketId;       
  uint8_t refId;          
  uint32_t lifetime;
  char udp_ip[16];        
  uint16_t udp_port;      
  StRes res[SIZE];  
  uint8_t res_cnt;                      
  rec1 res_cb;            
  rec2 udp_cb; 
} StNBIoTInstance;

.c文件
實際函數(shù)的參數(shù)要保證和結(jié)構(gòu)體中的函數(shù)體一致,在映射的時候不用帶參數(shù)(直接用函數(shù)名稱賦值)

void func1(T_Mode mode, uint32_t msgId, TUri uri, uint8_t *msg)//定義兩種函數(shù)作參數(shù)形式
{
  XXXX
}
void func2(uint8_t *msg, uint16_t len)
{
  XXXX
}
void main()//主函數(shù)調(diào)用
{
  st1 st;
  st.res_r = func1;
  st.res_u = func2;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Blocks Blocks Blocks 是帶有局部變量的匿名函數(shù) 截取自動變量值 int main(){ ...
    南京小伙閱讀 1,077評論 1 3
  • 一、框架 1、Mac系統(tǒng)及常用工具、進制;C數(shù)據(jù)類型、常量變量、運算符、表達(dá)式、格式化輸入輸出 2、關(guān)系運算符、邏...
    師景福閱讀 836評論 0 2
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,671評論 1 51
  • 1.C和C++的區(qū)別?C++的特性?面向?qū)ο缶幊痰暮锰帲?答:c++在c的基礎(chǔ)上增添類,C是一個結(jié)構(gòu)化語言,它的重...
    杰倫哎呦哎呦閱讀 9,996評論 0 45
  • 本學(xué)期的正式開學(xué)!第一天上課,新的老師和課堂!上著課的時候是真實的,不會感覺昨天才回來。中文工具書這門課的老師還比...
    眾知閱讀 118評論 1 1

友情鏈接更多精彩內(nèi)容