C語言中的巨集undef define

2021-06-01 23:37:40 字數 2416 閱讀 6746

在做乙個選單的時候,想首次進入選單的時候進入方法1不是首次進入的時候進入方法2,由於他們之間有公共的一部分 當時用的方法是 利用#define first 然後第一次用完後undef 後面判斷first有沒定義 ,#ifdef first。。。但在測試的時候卻發現執行不盡人意,第二天偶爾看見一篇關於巨集定義的解說,才發現 自己從寫**的初期就錯了,(語法錯誤 ) 巨集的定義 在 預處理的時候進行處理,記得很清楚,用卻想當然。 

void init_matrix(unsigned char temprat_inter,unsigned char temprat_float, 

unsigned char menu_flag, unsigned char key_argv)

break;//對溫度進行顯示 顯示主頁

case menu_display:break;

case temprat_set_menu:break;

case phone_set_menu: break;

default: break;

}} else if(menu_flag %10 == second_into) break;

case menu_display: break;

case temprat_set_menu:

case phone_set_menu: break;

default : writeaddress(0x00);//寫如資料的首位址

writedata('k' + temprat_inter/10);

} } }

void __1602lcd_main( unsigned char temprat_inter,unsigned char temprat_float,

unsigned char menu_flag, unsigned char key_argv) //主函式 不敢用指標,只敢用原型

// string[1]='s'; //這個可以

init_matrix(temprat_inter,temprat_float,menu_flag,key_argv);

if(menu_flag == first_into)

if(menu_flag%10 == first) //首次進入

writeaddress(0x40); // 設定顯示位置為第二行的第1個字

i = 0;

while(string[i] != '\0') //'\0'是陣列結束標誌

} //if(menu_flag%10 == second_into) 自己調的時候用

//while(1);

//delay(1000);

//while(1);

// delay(1000);

// write_com(0x08); //關閉顯示

//while(1);

// delay(3000); //延時 維持顯示一段時間

// write_com(0x0c);//開顯示

// while(1);

// delay(3000); //延時 維持顯示一段時間

// write_com(0x0f); //開游標

// while(1);

// delay(1000); //延時 維持顯示一段時間

//while(1);

// write_com(0x40); //設定cgram位址

// delay(5);

// for(j=0;j<8;j++ )

// // writeaddress(0x05);//設定螢幕上的顯示位置

// delay(5);

// writedata(0x00); //從cgram裡取出自定義圖形顯示

//while(1);

//}#ifdef menu_set_init_sucess

first_line;

#endif

}

#include

#define num_1 2

#define total (num_1) + 4

int main()

printf("%d\n",(int)total);

#undef num_1

#define num_1 1

printf("%d\n",(int)total);

return 0;

} 這裡答案是

這個預處理不受if的語句判斷。所以上面if是沒用的。

今天想用 巨集__cover 當成注釋符號用 即是 用這個替換  //  這個後來發現不可行  比如:#define __cover //   這時__cover並不是替換//而是空這個需要注意,難道要用轉義字元,(經過查詢 /,不用轉義) 這裡發現巨集定義並不是什麼都替換的

C語言中的巨集

c語言中如何使用巨集c 和c 中的巨集 macro 屬於編譯器預處理的範疇,屬於編譯期概念 而非執行期概念 下面對常遇到的巨集的使用問題做了簡單總結。在c語言的巨集中,的功能是將其後面的巨集引數進行字串化操作 stringfication 簡單說就是在對它所引用的巨集變數通過替換後在其左右各加上乙個...

c語言中的「巨集」

簡單來說 巨集定義又稱為巨集代換 巨集替換,簡稱 巨集 是c提供的三種預處理功能的其中一種。複雜的請看下面,講的很全。下面的帶參巨集定義,多行巨集定義,在linux核心原始碼中很多。另外sizeof也是乙個巨集定義。巨集定義巨集定義是c提供的三種預處理功能的其中一種,這三種預處理包括 巨集定義 檔案...

C語言中的巨集

巨集是編譯器的東西,是純粹的 字元替換 與程式語言其他什麼一切都無關。僅僅是幫助你更好地輸入字元。例如 下面程式 void main 相信你輸入程式時候很苦惱,並且如果其中某個3.1415926535897932384626433832795被錯改了一小數字的話,造成的錯誤極其難發現。所以,利用字元...