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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

怎样安全的使用可变参数宏__VA_ARGS__

發布時間:2025/7/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 怎样安全的使用可变参数宏__VA_ARGS__ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  今天遇到一個關于可變參數的問題,下面先給出一個示例程序說明我遇到的問題。
0 #include <stdio.h>
1
2 #define print(fmt, ...) out(fmt, __VA_ARGS__)
3 #define out(fmt, ...) printf(fmt, __VA_ARGS__)
4
5 int main(int argc, char** argv)
6 {
7 print("hello %d\n", 0);
8 print("hello\n");
9 return 0;
10 }
  為了說明問題,上面有兩個print宏調用,出問題的是第二個。 用gcc編譯的時候給出錯誤提示:"7:2: error: expected expression before ')' token"。

  gcc的錯誤提示說明第8行的無參數的宏print調用是錯誤的。原因清晰,第八行的"hello\n"后面沒有給出參數,導致"printf(fmt, __VA_ARGS__)"編譯后成了"printf("hello\n", )",原因很清楚了。

  那么,為了去掉gcc 編譯錯誤,我是不是得把第8行代碼改成第7行的樣式湊合著用?
  經過半天google,在 http://hi.baidu.com/pragmatist/item/591a8a4ccbd643086dc2f035 得到了答案(補充一下,百度真垃圾,自己搜自己的網頁,還是沒有給出我想要的答案)。文中有提示"##符號在 逗號 和 參數名 之間時不做連字符作用,而作為變參宏的特別用處",我急忙把程序修改成如下代碼:
1 #include <stdio.h>
2
3 #define print(fmt, ...) out(fmt, __VA_ARGS__)
4 #define out(fmt, ...) printf(fmt, ##__VA_ARGS__)
5
6 int main(int argc, char** argv)
7 {
8 print("hello %d\n", 0);
9 print("hello\n");
10 return 0;
11 }
  我只修改了第4行的代碼,此時gcc仍然給我相同的提示,難道我用錯了?沒辦法了,只好找來同事幫忙。同事很給力了,一見代碼,就見了親人,說,再把第三行修改一下。最終代碼如下:
1 #include <stdio.h>
2
3 #define print(fmt, ...) out(fmt, ##__VA_ARGS__)
4 #define out(fmt, ...) printf(fmt, ##__VA_ARGS__)
5
6 int main(int argc, char** argv)
7 {
8 print("hello %d\n", 0);
9 print("hello\n");
10 return 0;
11 }

  通過gcc -E test.c,得到如下代碼:



int main(int argc, char** argv)
{
?printf("hello %d\n", 0);
?printf("hello\n");
?return 0;
}
  此時,預編譯后的代碼中第8行的結果中沒有煩人的逗號,一切都很美好,gcc的錯誤提示沒有了。再次領略靜心細心的重要性。

  建議以后使用變參__VA_ARGS__都以##__VA_ARGS__的形式使用。

轉載于:https://www.cnblogs.com/menggucaoyuan/archive/2012/10/11/2720466.html

總結

以上是生活随笔為你收集整理的怎样安全的使用可变参数宏__VA_ARGS__的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 麻豆传媒在线 | 天天摸夜夜爽 | 韩国三级bd高清中字2021 | 吖v在线 | ,午夜性刺激免费看视频 | 91超碰在线观看 | 亚洲天堂精品在线观看 | 午夜激情视频网站 | 多男调教一女折磨高潮高h 国内毛片毛片毛片毛片毛片 | 91色视频在线 | 超碰香蕉| 国产精品丝袜黑色高跟鞋的设计特点 | 久久片 | 一区二区不卡在线观看 | 国产第十页 | 欧美一区在线观看视频 | 91亚洲精品久久久久久久久久久久 | 亚洲精品国产精品乱码不99 | 97精品人妻一区二区三区蜜桃 | 日韩久久精品电影 | 狠狠干夜夜草 | 日本一区二区免费电影 | 中文在线字幕免费观 | 精品视频在线观看一区 | youjizz日本人| 一女三黑人理论片在线 | 亚洲欧美色视频 | 久久精品国产99国产精品 | 男人天堂视频网 | 亚洲AV永久无码国产精品国产 | 亚洲乱码视频在线观看 | 久热久 | a级欧美 | 国产稀缺真实呦乱在线 | 欧美另类在线观看 | 亚洲无吗在线观看 | 激情网av| 老妇女玩小男生毛片 | 久久精品国产亚洲AV成人婷婷 | 久久伊人免费视频 | 欧美性猛交ⅹxx乱大交 | 一本一道无码中文字幕精品热 | 午夜av网址| 亚洲美女自拍 | 污污视频在线观看网站 | 久久国产综合 | 久久久久久伊人 | 日韩av大片在线观看 | 日本视频黄色 | 黄色免费观看网站 | 成人动漫在线免费观看 | 午夜777 | 超碰98在线观看 | 亚洲精品在线免费观看视频 | 亚洲天堂性 | 羞羞涩涩网站 | 久草老司机| 国产精品天堂 | 91亚洲国产成人精品一区二区三 | 337p粉嫩大胆噜噜噜亚瑟影院 | 毛片福利视频 | 少妇捆绑紧缚av | 美女裸体网站久久久 | 亚洲国产97| 91操操 | 国产一区欧美二区 | 欧美亚洲高清 | 91精品人妻一区二区三区 | 亚洲av无码乱码在线观看性色 | 欧美一a| 欧美精品久久久久久久久久 | 蜜桃久久一区二区三区 | 免费在线看污视频 | 毛片手机在线 | 亚洲成人基地 | 男人与雌性宠物交啪啪 | 黄色免费大片 | 黄色成人在线视频 | 亚洲人成无码网站久久99热国产 | 中文字幕一区日韩 | 草草草在线观看 | 欧美性猛交xxxx黑人交 | 欧美在线播放一区二区 | 成人日韩欧美 | 成人h动漫精品一区 | 人妻丰满熟妇av无码久久洗澡 | 樱桃视频一区二区三区 | 九九激情网 | 亚洲综合在线播放 | 亚洲天天操 | 国产免费av网址 | 午夜在线视频免费观看 | 久久精品色欲国产AV一区二区 | 最新视频–x99av | 亚洲爱av| 欧美中出 | 日韩区一区二 | 国产精品三区四区 | xxxxx在线观看 |