簡體   English   中英

__VA_ARGS__ 問題

[英]Trouble with __VA_ARGS__

C++ 預處理器 __VA_ARGS__ 參數數量

那里接受的答案對我不起作用。 我已經嘗試過 MSVC++ 10 和 g++ 3.4.5。

我還將示例壓縮成更小的內容,並開始嘗試在錯誤中打印出一些信息:

template < typename T >
struct print;

#include <boost/mpl/vector_c.hpp>

#define RSEQ_N 10,9,8,7,6,5,4,3,2,1,0
#define ARG_N(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,N,...) N
#define ARG_N_(...) ARG_N(__VA_ARGS__)

#define XXX 5,RSEQ_N

#include <iostream>
int main()
{
  print< boost::mpl::vector_c<int, ARG_N_( XXX ) > > g; // ARG_N doesn't work either.
}

在我看來, ARG_N 的論點最終是 'XXX' 而不是5,RSEQ_N ,更不用說5,10,...,0 g++ 的錯誤輸出更具體地說明只提供了一個參數。

很難相信答案會被提出然后在它完全不起作用時被接受,那么我做錯了什么? 為什么XXX被解釋為參數而不被擴展? 在我自己的混亂中,一切正常,直到我嘗試將VA_ARGS傳遞給包含一些名稱后跟 ... 的宏,如下所示:

#define WTF(X,Y,...) X , Y , __VA_ARGS__
#define WOT(...) WTF(__VA_ARGS__)

WOT(52,2,5,2,2)

我已經在各種不接受輸入的宏中嘗試過使用和不使用()

__VA_ARGS__最初是在 C99 中引入的,在 C++11 之前不是 C++ 標准的一部分。 您在此處引用的編譯器不支持 C++11(我相信),盡管更現代的編譯器應該能夠很好地處理這個問題。

我看不出你的宏有什么問題。

同時使用 g++ 4.5.1(在 C++0x 模式下)和 mcpp, ARG_N_( XXX )1正確替換。

這是Visual C++ 中報告的錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM