Linux __stringify && __stringify_1__Linux

來源:互聯網
上載者:User

Linux中有個stringify的標頭檔,裡面主要的內容如下:

#ifndef __LINUX_STRINGIFY_H#define __LINUX_STRINGIFY_H/* Indirect stringification.  Doing two levels allows the parameter to be a * macro itself.  For example, compile with -DFOO=bar, __stringify(FOO) * converts to "bar". */#define __stringify_1(x...)#x#define __stringify(x...)__stringify_1(x)#endif/* !__LINUX_STRINGIFY_H */

裡面有兩個define,依照注釋看的不太明白。為什麼中間要通過__stringify_1轉換一下呢。直接使用#define __stringify(x...) #x豈不是更加簡潔。


編程測試一下:

#include <stdio.h>#define AAA BBB#define __stringify_1(x...) #x#define __stringify(x...) __stringify_1(x)#define __stringify_src(x...) #xmain(){printf("stringify(AAA):     %s\n", __stringify(AAA));printf("stringify_src(AAA): %s\n",__stringify_src(AAA));}

啟動並執行結果如下:

stringify(AAA):     BBB
stringify_src(AAA): AAA

然後回過頭來看注釋,就一清二楚了。

不過注釋裡有這一句“Doing two levels allows the parameter to be a macro itself.”

該怎麼理解呢。

如果在#define AAA BBB之前再定義一個#define BBB CCC,#define CCC DDD ......,這個程式啟動並執行結果如何呢。

呵呵,大家可以嘗試一下。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.