C++如何在變量前面加#
C++中變量前面加#
C++中變量前面加#的作用為把變量字符串化。
看如下的幾個例子
例1:代碼如下
#include <iostream>
using namespace std;
#define operation(NAME) cout<<#NAME<<" = "<<NAME<<endl;
int main()
{
int AB_CD=1;
operation(AB_CD);
}結(jié)果如下:

例2:代碼如下
#include <iostream>
#include<string.h>
using namespace std;
#define operation(NAME) string a=#NAME;
int main()
{
operation(AB_CD);
cout << a << endl;
}結(jié)果如下:

C++中#(一個#號)和##(兩個#號)的用法和作用
關(guān)于一個#號
在C語言的宏中,#的功能是將其后面的宏參數(shù)進(jìn)行字符串化操作, 簡單說就是對他所引用的宏變量通過替換后再其左右各加上一個雙引用。
例子:
# define WARNIF(EXP) \
do{ \
? ? if (EXP) \
? ? { ? ?\ ? ?
? ? ? ? fprintf(stderr, "warning:" #EXP "\n"); \
? ? } ? \ ? ?
}while(0) ? ?在實(shí)際使用中會出現(xiàn)下面所示的替換過程:
WARN_IF(div == 0); 被替換成以下代碼
do{
? ? if (div == 0)?
? ? { ? ? ? ?
? ? ? ? fprintf(stderr, "warning:" "div == 0" "\n");?
? ? } ? ? ??
}while(0)關(guān)于兩個#號
##被稱為連接符,用來將兩個Token鏈接成一個Token.注意這里的連接的對象時Token就行, 而不一定是宏的變量。比如你要做一個菜單項命令名和函數(shù)指針組成的結(jié)構(gòu)體的數(shù)組,并且希望在函數(shù)和菜單項命令名直
接有直觀的名字上的關(guān)系, 那么下面的代碼就非常實(shí)用
struct command
{
? ? char *name;
? ? void (*function)(void);
};
#define COMMAND(NAME){NAME, NAME##_command}然后就用一些預(yù)定義好的命令來方便的初始化一個command結(jié)構(gòu)的數(shù)據(jù)了:
struct command commands[] = {
????COMMAND(quit),
????COMMAND(help),
????...
}COMMAND宏在這里充當(dāng)一個代碼生成器的作用,這樣可以在一定程度上減少代碼的密度, 間接的也可以減少粗心所造成的錯誤。
我們還可以n個##符號鏈接n+1個Token,這個特性也是#符號所不具備的。
例如:
#define LINK_MULTIPLE(a, b, c, d) a##_##b##_##c##_###d typedef struct_record_type LINK_MULTIPLE(name, company, position, salary); //展開內(nèi)容為 : typedef struct_record_type name_company_position_salary;
關(guān)于...的使用
...在C語言中被稱為變參宏
#define myprintf(templt, ...) ?fprintf(stderr, templt, ##__VA_ARGS__)
這是##這個連接符充當(dāng)?shù)淖饔镁褪钱?dāng)__VA_ARGS__為空的時候, 消除前面的那個逗號。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
深入剖析C++中的struct結(jié)構(gòu)體字節(jié)對齊
要求數(shù)據(jù)內(nèi)存的起始地址的值是某個數(shù)k的倍數(shù),這就是所謂的內(nèi)存對齊,本文就來深入剖析C++中的struct結(jié)構(gòu)體字節(jié)對齊,需要的朋友可以參考下2016-05-05
關(guān)于C語言 const 和 define 區(qū)別
這篇文章主要介紹了關(guān)于C語言 const 和 define 區(qū)別 的相關(guān)資料,需要的朋友可以參考下面文章內(nèi)容2021-09-09
C++?qsort函數(shù)排序與冒泡模擬實(shí)現(xiàn)流程詳解
qsort是一個庫函數(shù),基于快速排序算法實(shí)現(xiàn)的一個排序的函數(shù),下面這篇文章主要給大家介紹了關(guān)于C語言qsort()函數(shù)使用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10
VS2022添加代碼模板的實(shí)現(xiàn)步驟(圖文)
使用代碼模板即可實(shí)現(xiàn)像內(nèi)置函數(shù)那樣,只需寫幾個字母,便能提示自動補(bǔ)全,本文主要介紹了VS2022添加代碼模板的實(shí)現(xiàn)步驟,感興趣的可以了解一下2024-06-06

