日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言ok未定义标识符,C语言中宏的相关知识 - osc_y7ckpzr9的个人空间 - OSCHINA - 中文开源技术交流社区...

發布時間:2023/12/2 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言ok未定义标识符,C语言中宏的相关知识 - osc_y7ckpzr9的个人空间 - OSCHINA - 中文开源技术交流社区... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019/04/27 16:02 1.宏的定義:宏定義就是預處理命令的一種,它允許用一個標識符來表示一個字符串。格式如下:

#define name(宏名) stuff(字符串)

本質就是使用宏名去替代字符串的內容,注意是原封不動的替換,不要自己潛意識加上其他的括號啊之類的。 #define宏名 字符串#表示這是一條預處理命令,所有的預處理命令都以#開頭。define是預處理命令。宏名是標識符的一種,命名規則和標識符相同。字符串可以是常數、表達式等。 可以發現宏只對宏定義后的行數起作用,且與定義在哪里無關,即使函數不被調用,也可以使用宏。 宏函數不能出現遞歸。 宏定義的符號,即name部分不會在預處理替換的時候被搜索。 宏定義是#define后面不需要加上“;”,不然分號也會被替代進去。 2.宏函數的申明: 宏函數申明格式:

#define name ( parament-list ) stuff

parament-list為參數表,可以包含多個參數,他們會在stuff出現

#的用法 首先要理解一個原則,即鄰近字符串連接原則 在C語言中 printf(“hello”” world!”“\n”); 這句話是合法的 打印結果為: hello world!

#define PRINT(FORMAT, VALUE) printf("the value of " #VALUE " is "FORMAT"\n", VALUE)

int main()

{

int i = 0;

PRINT("%d", i + 3);

return 0;

}

所以我們可以看出來#的作用: 將一個宏參數變成一個對應的字符串 在上述例子中: #VALUE被替換成了“i + 3” 別忘了被替換的時候i + 3兩邊加上了雙引號 ##的用法

#define ADD_TO_AN(num, value) a##num += value

int main()

{

int a1 = 0;

int a2 = 0;

ADD_TO_AN(1, 5);

ADD_TO_AN(2, 6);

return 0;

}

解釋一下上面這段代碼

假設有一個變量叫a1

此時代碼片段為ADD_TO_AN(1, 5)

即替換為a1 += 5,給a1變量增加5

同理ADD_TO_AN(2, 6)則替換成a2 += 6

##的作用 將##兩邊的字符連在一起作為一個標識符 前提連接后的標識符必須合法,否則編譯出現標識符未定義

宏定義是用宏名來表示一個字符串,在宏展開時又以該字符串取代宏名,這只是一種簡單的替換。字符串中可以含任何字符,可以是常數,也可以是表達式,預處理程序對它不作任何檢查,如有錯誤,只能在編譯已被宏展開后的源程序時發現。

宏定義不是說明或語句,在行末不必加分號,如加上分號則連分號也一起替換。

宏定義必須寫在函數之外,其作用域為宏定義命令起到源程序結束。如要終止其作用域可使用#undef命令。

宏名在源程序中若用引號括起來,則預處理程序不對其作宏代換,例如:

#include #define OK 100

int main()

{

printf("OK\n");

return 0;

}

該例中定義宏名OK表示100,但在 printf 語句中 OK 被引號括起來,因此不作宏代換,而作為字符串處理。 5) 宏定義允許嵌套,在宏定義的字符串中可以使用已經定義的宏名,在宏展開時由預處理程序層層代換。 6) 習慣上宏名用大寫字母表示,以便于與變量區別。但也允許用小寫字母。 7) 可用宏定義表示數據類型,使書寫方便。例如:#define UINT unsigned int 在程序中可用UINT作變量說明:UINT a, b; 應注意用宏定義表示數據類型和用typedef定義數據說明符的區別。宏定義只是簡單的字符串代換,是在預處理完成的,而typedef是在編譯時處理的,它不是作簡單的代換,而是對類型說明符重新命名。被命名的標識符具有類型定義說明的功能。

總結

以上是生活随笔為你收集整理的c语言ok未定义标识符,C语言中宏的相关知识 - osc_y7ckpzr9的个人空间 - OSCHINA - 中文开源技术交流社区...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。