C++/C 宏定義(define)中# ## 的含義(轉)

參考:http://www.cnblogs.com/little-ant/p/3463080.html

http://hi.baidu.com/kiraversace/item/1148ee057147981a4ac4a3e9

C++/C 宏定義(define)中# ## 的含義

define?中的#?##?一般是用來拼接字符串的,但是實際使用過程中,有哪些細微的差別呢,我們通過幾個例子來看看。

#是字符串化的意思出現在宏定義中的#是把跟在后面的參數轉成一個字符串

#define ENUM_to_String(enum_id) ?#enum_id

eg:

1
2
3
#define??strcpy__(dst,?src)??????strcpy(dst,?#src)
?????
strcpy__(buff,abc)??相當于?strcpy__(buff,“abc”)

##是連接符號,把參數連接在一起

1
2
3
#define?FUN(arg)?????my##arg
則?????FUN(ABC)
等價于??myABC

再看一個具體的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include?<iostream>
?????????
using?namespace?std;
?????????
#define??OUTPUT(A)?cout<<#A<<":"<<(A)<<endl;
?????????
int?main()
{
????int?a=1,b=2;
?????????
????OUTPUT(a);
????OUTPUT(b);
????OUTPUT(a+b);
?????????
????return?1;
}

id="iframe_0.24500557948733026" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://a.hiphotos.baidu.com/album/pic/item/2fdda3cc7cd98d1081fdc3df213fb80e7bec9037.jpg?_=3463080%22%20style=%22border:none;max-width:999px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.24500557948733026',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="margin: 0px; padding: 0px; border-width: initial; border-style: none; width: 991px; height: 660px;">

?

去掉#號我們得到這樣的結果,直接把a,b的值打印出來了,這是符合語法規則的,所以#的作用顯而易見。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include?<iostream>
????????
using?namespace?std;
????????
#define??OUTPUT(A)?cout<<A<<":"<<(A)<<endl;
????????
int?main()
{
????int?a=1,b=2;
????????
????OUTPUT(a);
????OUTPUT(b);
????OUTPUT(a+b);
????????
????return?1;
}

?

id="iframe_0.5359436411709109" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://a.hiphotos.baidu.com/album/pic/item/2cf5e0fe9925bc31fc2ace765edf8db1ca1370ed.jpg?_=3463080%22%20style=%22border:none;max-width:999px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.5359436411709109',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="margin: 0px; padding: 0px; border-width: initial; border-style: none; width: 958px; height: 602px;">

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458631.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458631.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458631.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Implicit declaration of function 'NSFileTypeForHFSTypeCode' is invalid in C99

一般出現該問題是因為通過C調用了unix/linux 底層接口&#xff0c;所以需要調整c語言的編譯選項&#xff0c;設置方法見下圖&#xff1a;(根據實際情況選擇相應的編譯選項)

C++里的花括號{},塊,作用域

{ } 里的內容是一個“塊”。單獨的{ }在執行順序上沒有改變&#xff0c;仍然是順序執行&#xff0c;不同的是標識符的作用域限定 。#include <iostream>#include <string>using namespace std;class tcalss{string Name;public:tcalss(string name){Namename;cout&…

iOS關于armv7,armv7s,arm64,i386,x86_64等問題

iOS測試分為模擬器測試和真機測試&#xff0c;處理器分為32位處理器&#xff0c;和64位處理器&#xff0c; 模擬器32位處理器測試需要i386架構&#xff0c;&#xff08;iphone5,iphone5s以下的模擬器&#xff09; 模擬器64位處理器測試需要x86_64架構&#xff0c;(iphone6以上的…

DebugView 調試入門

參考鏈接&#xff1a;http://blog.csdn.net/jiankunking/article/details/44984487 軟件下載地址&#xff1a;點擊打開鏈接 debugview 可以捕獲程序中由TRACE(debug版本)和OutputDebugString輸出的信息。支持Debug、Release模式編譯的程序&#xff08;即該軟件捕獲的是exe直接運…

AJAX只支持字符類數據返回,不支持文件下載

如題轉載于:https://www.cnblogs.com/caicaizi/p/5000363.html

Xcode中指令集相關選項

Xcode中指令集相關選項&#xff08;Build Setting中&#xff09; &#xff08;1&#xff09;Architectures Space-separated list of identifiers. Specifies the architectures (ABIs, processor models) to which the binary is targeted. When this build setting specifies…

DebugView使用筆記

1. 什么是DebugView? 它是Sysinternals公司的系列調試工具。可以捕獲程序中由TRACE()和OutputDebugString輸出的信息。 2. C需要完成哪些工作呢&#xff1f; 將打印的信息用OutputDebugString輸出&#xff0c;示例&#xff1a; [cpp] view plaincopy #include "stdio.h&q…

DebugView的使用[通用匯總]

DebugView是一款免費輔助工具&#xff0c;用來輸出捕捉OutputDebugString()函數輸出的信息等。 1 下載 http://technet.microsoft.com/en-us/sysinternals/bb896647 1.1 介紹DebugView http://www.vcfans.com/2008/11/trace-show-about-a-tool-debugview-sent-a-message-to-tra…

Android 通信 EventBus

參考&#xff1a; Android 框架煉成 教你如何寫組件間通信框架EventBusAndroid EventBus源碼解析 帶你深入理解EventBusAndroid EventBus實戰 沒聽過你就out了快速Android開發系列通信篇之EventBusEventBus是一個publish/subscribe (發布 / 訂閱) 消息的總線&#xff0c;簡化了…

WIFI無線路由器的五種工作模式

http://www.360doc.com/content/12/0814/08/10560798_230064460.shtml

iOS面試題1

而技術開發面試&#xff0c;問一些技術相關的問題是必須的&#xff0c;最新的技術可能人人都趨之若鶩&#xff0c;但有些原理和基礎的也希望都有了解。 這里整理了一些iOS相關的面試題&#xff0c;&#xff08;可能都已經老掉牙&#xff09;但是也想跟大家分享下&#xff01; 如…

高質量JAVA代碼編寫規范

1. Java 命名約定   除了以下幾個特例之外&#xff0c;命名時應始終采用完整的英文描述符。此外&#xff0c;一般應采用小寫字母&#xff0c;但類名、接口名以及任何非初始單詞的第一個字母要大寫。 1.1 一般概念   * 盡量使用完整的英文描述符   * 采用適用于相關領域的…

MFC中繪制動態曲線

參考&#xff1a; http://blog.csdn.net/zang141588761/article/details/50536788 [轉載]MFC中畫直線和曲線 一、畫直線要想在MFC中畫出有顏色的線條&#xff0c;首先就要設置DC的畫筆&#xff0c;我們可以按如下方法來設置畫筆&#xff1a;第一步&#xff1a;在View類中添加…

博客地址 RSS地址

博客地址 RSS地址 OneVs Den http://onevcat.com/atom.xml 破船之家 http://beyondvincent.com/atom.xml NSHipster http://nshipster.cn/feed.xml Limboy 無網不剩 http://feeds.feedburner.com/lzyy 唐巧的技術博客 http://blog.devtang.com/atom.xml Lex iOS notes http://i…

2015.11.27---Java

public class star{public static void main(String[] args) {System.out.print("ha");}}轉載于:https://www.cnblogs.com/supermeimei/p/5001922.html

QT之深入理解QThread

QT之深入理解QThread 理解QThread之前需要了解下QThread類&#xff0c;QThread擁有的資源如下&#xff08;摘錄于QT 5.1 幫助文檔&#xff09;&#xff1a;在以上資源中&#xff0c;本文重點關注槽&#xff1a;start()&#xff1b;信號&#xff1a;started()、finished()&#…

常見人事問題

整體素養的常見問題 一、請你自我介紹一下你自己&#xff1f; &#xff08;面試官目的&#xff1a;深度了解求職者&#xff0c;看求職者基本的溝通和自我認知能力&#xff09; NO: 只說姓名、年齡、愛好等基本的信息后就沒了。只重復簡歷里的內容&#xff0c;如工作經驗就…

springMVC數據封裝成POJO

springMVC把前臺的數據封裝為POJO與struts2的封裝形式不同。struts2需要在控制器聲明需封裝的POJO&#xff0c;而springMVC不需要任何準備工作&#xff0c;只需在相應的方法的參數中加上需封裝的POJO&#xff0c;當用戶提交表單時&#xff0c;springMVC會根據表單中dom元素的na…

QT輸入輸出(四)之 QProcess

QProcess Qt提供了一個QProcess類用于啟動外部程序并與之通信.這個類是異步工作的&#xff0c;而且在后臺執行&#xff0c;這樣用戶界面就可以始終保持響應。 啟動一個新的進程的操作非常簡單,只需要將待啟動的程序名稱和啟動參數傳遞給start()函數即可. 例如&#xff1a; QObj…

iOS 推送 邏輯

推送 階段一&#xff1a;Provider[服務端]把要發送的消息&#xff0c;目的IOS設備標識打包&#xff0c;發送給APNS&#xff1b; 階段二&#xff1a;APNS在自身的已注冊Push服務的IOS設備列表中&#xff0c;查找有相應標識的IOS設備&#xff0c;并將消息發送到IOS設備&#xff1…