宏定義中的“#”與“##”
宏定義在C/C++中使用的非常多,一方面定義一些常量,另一方面定義一些通用函數,但是有些宏定義實現較為復雜,尤其是很多帶#或##的宏定義,令很多人讀起來很不解,下面就簡單介紹一下宏定義中的#和##。
- 宏定義裏面有個##表示把字符串聯在一起。如:
#include <stdio.h>
#define CAT(x,y) x##y
int main()
{
char helloworld[] = "hi, hello world!";
printf("%s", CAT(hello, world));
return 0;
}
- 宏定義中的#表示將其變為字符串。如:
#include <stdio.h>
#include<string.h>
#define STRCPY(a, b) strcpy(a ##_p, #b)
int main()
{
char arrr_p[]="abcdefg";
char *bb = "123456";
STRCPY(arrr, bb);
printf("%s\n",arrr_p);
return 0;
}
宏定義中的“#”與“##”
相關推薦
宏定義中的“#”與“##”
() 在一起 string include star 但是 return 宏定義 block 宏定義在C/C++中使用的非常多,一方面定義一些常量,另一方面定義一些通用函數,但是有些宏定義實現較為復雜,尤其是很多帶#或##的宏定義,令很多人讀起來很不解,下面就簡單介紹一下宏
宏定義陷阱與typedef
一個 typedef ptr 變量 所有 string efi har 不能 #define int_ptr int* int_ptr point1,point2; 經預處理後,第二行變為 int * point1,point2. 這就意味著,point1 是
C/C++中const關鍵字的用法及其與宏定義的比較
類型安全 屬性 const關鍵字 code oid 程序 函數返回值 存儲空間 臨時對象 1.const關鍵字的性質 簡單來說:const關鍵字修飾的變量具有常屬性。 即它所修飾的變量不能被修改。 2.修飾局部變量 1 const int a = 10; 2 int co
Linux 內核中 likely 與 unlikely 的宏定義解析
帶來 內核版本 sta don 等價 ddc 編譯 views lines 在 2.6 內核中,隨處能夠見到 likely() 和 unlikely() 的身影,那麽為什麽要用它們?它們之間有什麽差別? 首先要明白: if(likel
ATL中宏定義offsetofclass的分析
推斷 文章 指向 [] atl 嘗試 tla water appdata 近日學習ATL,通過對宏定義offsetofclass的解惑過程。順便分析下虛函數表,以及通過虛函數表調用函數的問題。 1 解開ATL中宏定義offsetofclass的疑惑
[轉]c語言宏定義#define的理解與資料整理
執行 跟蹤 single 字母 number 而是 字符串 endif 一段 原文地址:http://www.cnblogs.com/haore147/p/3646934.html 1. 利用define來定義 數值宏常量 #define 宏定義是個演技非常高超的替
預處理、const、static與sizeof-用宏定義得到一個字的高位和低位字節
fine color byte pre log word sizeof pan static 1:代碼如下: #define WORD_LO(XXX) ((byte) (word)(XXX) & 255) #define WORD_HI(XXX) ((byte)
c語言中宏定義和常量定義的區別
沒有 int 符號表 cnblogs 格式 nbsp 參數 不同之處 區別 他們有共同的好處就是“一改全改,避免輸入錯誤”哪兩者有不同之處嗎?有的。 主要區別就在於,宏定義是在編譯之前進行的,而const是在編譯階段處理的 宏定義不占用內存單元而const定義的常量
6、C_宏定義與預處理、函數與函數庫
a10 使用 不可 find 字符串比較 pos cde 文件包含 mnt C語言預處理理論 由源碼到可執行程序的過程 源碼.c->(編譯)->elf可執行程序 源碼.c->(編譯)->目標文件.o->(鏈接)->elf可執行程
常用宏定義 - 獲取橫豎屏寬度與高度
ive allow resp selector 橫豎 clas version nat main 需要橫屏或者豎屏,獲取屏幕寬度與高度 #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 // 當前Xcode支持iOS8及以上
Python中自定義異常與丟擲異常
# class ShortInputException(Exception): # def __init__(self,length,atleast): # super().__init__() # self.length = length #
BIGEMAP教您如何在ArcGIS中自定義座標系與投影轉換
座標系統是GIS資料重要的數學基礎,用於表示地理要素、影象和觀測結果的參照系統,座標系統的定義能夠保證地理資料在軟體中正確的顯示其位置、方向和距離,缺少座標系統的GIS資料是不完善的,因此在ArcGIS軟體中正確的定義座標系統以及進行投影轉換的操作非常重要。 1.&
內核中的宏定義__init、__initdata和__exit、__exitdata
sil 區域 聲明 ons cpu blog class bit fine __init、__initdata和__exit、__exitdata的定義位於<kernel/include/linux/init.h> 1 /* These are for
SQL中資料定義語言與資料操作語言
我們可以把 SQL 分為兩個部分:資料操作語言 (DML) 和 資料定義語言 (DDL)。 SQL (結構化查詢語言)是用於執行查詢的語法。但是 SQL 語言也包含用於更新、插入和刪除記錄的語法。 查詢和更新指令構成了 SQL 的 DML 部分: SELECT
[C++] C++中的宏定義詳解
兩個 分配 學習 處理 編程 工作 計算 ++i 應用 轉載自:C++中的宏定義 和 C++宏定義詳解 一、#define解析 #define是C語言中提供的宏定義命令,其主要目的是為程序員在編程時提供一定的方便,並能在一定程度上提高程序的運行效率,但學生在學習時往
C巨集定義中##連線符與#符的含義
文章目錄 參考 note 不帶引數的巨集 附加說明: 帶引數的巨集 應題重點 有參巨集定義中#的用法 有參巨集定義中##的用法 實際的例子:
在Struts2中,自定義radio與select的值
在前端頁面引入Struts2標籤後,是否可以自定義標籤 radio ,select 中包含的值(就是把值寫死),參考如下 <s:radiolist="#{1:'日',2:'月',5:'季',
C++類作用域的問題,在類定義中宣告常量與使用的問題
class Stock { private: std::string company; const int Month = 12; double costs[Month]; //報錯 long cost = Month; //正確 ... }; 上面是程式碼,
Android中自定義樣式與View的建構函式中的第三個引數defStyle的意義
零、序 零、序 系統自帶的View可以在xml中配置屬性,對於寫的好的Custom View同樣可以在xml中配置屬性,為了使自定義的View的屬性可以在xml中配置,需要以下4個步驟: 通過<declare-styleable>為自定
java中類的定義位置與分類
在java中,類最常見的定義位置是檔案中,一個檔案中可以定義多個類,但是隻能有一個public的類,而且java檔名必須和這個public類相同。看看下面程式碼 package com.senmu.pack_a //TestA.java public cl