標題: C語言帶#號的編譯預(yù)處理命令和typedef類型名重定義 [打印本頁]

作者: qiushuliang    時間: 2022-6-1 10:12
標題: C語言帶#號的編譯預(yù)處理命令和typedef類型名重定義
#define    宏名   字符串  

以一個宏名稱來代表字符串,即當C語言程序中任何地方使用到宏名稱時,則將以所代表的字符串來代替。宏定義的一般是常數(shù)或者表達式常數(shù)項,不是變量。
用宏定義有什么好處呢?
1.如C語言程序中多處 引用某一常數(shù)量,可以用宏來定義,便于程序修改,維護時修改宏名即可完成所有常數(shù)量的修改。
例:
  1. #define CLOCK_BASE   1 //程序編譯時會有把程序中所有用CLOCK_BASE 表示的地方,替換成常數(shù) 1
  2. #define CLOCK_40MS  (65535-40000*CLOCK_BASE) // 表達式
  3. #define LED_ON ( )  RB1=1
  4. #define LED_OFF ( )  RB1=0

復(fù)制代碼

條件編譯
#if  表達式
#else
#endif

例1:
  1. #if  0  //0永遠不成立,編譯#else 后面的代碼
  2. P1 = P1 | 0XFE ;
  3. keyvalue = P1 &  0XFE ;
  4. #else
  5. P1 = P1 | 0X7E ;
  6. keyvalue = P1 &  0X7E ;
  7. #endif
復(fù)制代碼
typedef 重定義類型名
  1. typedef unsigned int  u16 ;
  2. typedef unsigned char u8 ;

  3. void typedef Demo1 (void)
  4. {
  5.    Bool j ;
  6.    j=0 ;
  7. }
復(fù)制代碼

#ifndef 宏名  
  1. # ifndef  PWM  //如果PWM沒有被定義過,則編譯下面的代碼
  2. #define PWM
  3. #define SUCCESS  0
  4. #define FAILURE 1
  5. #endif
復(fù)制代碼

有人說 :   程序=數(shù)據(jù)結(jié)構(gòu)+算法,C語言程序?qū)W到這里還沒有正真的開始,一個用C語言編寫的單片機成品,打開電源時MCU執(zhí)行的第一個程序是從main()這個函數(shù)開始的,在程序中重復(fù)執(zhí)行循環(huán),可以讓MCU不斷的輪詢外部狀態(tài),以進行實時處理。C語言程序往往在編寫程序前要先指定頭文件,
#include 文件名.h,因為頭文件里面定義了很多單片機的公共變量及函數(shù),必須聲明成外部的(extern),以利其他模塊和函數(shù)使用。下節(jié)從點亮一顆LED燈開始,說明單片機程序是如何運行起來的。

作者: a399288395    時間: 2022-6-2 08:44
這個資料挺好, 對于新手很有幫助,
作者: showlight    時間: 2022-8-7 21:28
void typedef Demo1 (void)
{
   Bool j ;
   j=0 ;
}

這個代碼 運行不了, 是我的機子出什么 問題了嗎?

作者: showlight    時間: 2022-8-7 21:35
這個資料很不錯,可就是我不會。

作者: qiushuliang    時間: 2022-8-26 11:28
showlight 發(fā)表于 2022-8-7 21:28
void typedef Demo1 (void)
{
   Bool j ;

typedef  bit  Bool;             #類型名重定義
void TypedefDemo1(void) #更正一下錯誤typedef Demo1    改寫成  TypedefDemo1
{
  Bool j;
  j = 0;
}




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1