相关疑难解决方法(0)

C++预处理器__VA_ARGS__参数个数

简单的问题,我无法在网上找到答案.在可变参数宏中,如何查找参数的数量?如果它有解决方案,我可以使用boost预处理器.

如果它有所不同,我试图转换可变数量的宏参数来增强预处理器序列,列表或数组以进行进一步的重新处理.

c c++ c-preprocessor variadic-macros

90
推荐指数
8
解决办法
10万
查看次数

我们可以有递归宏吗?

我想知道我们是否可以在C/C++中使用递归宏?如果是,请提供示例.

第二件事:为什么我无法执行以下代码?我在做什么错?是因为递归宏吗?

# define pr(n) ((n==1)? 1 : pr(n-1))
void main ()
{
    int a=5;
    cout<<"result: "<< pr(5) <<endl;
    getch();
}
Run Code Online (Sandbox Code Playgroud)

c c++ macros c-preprocessor

50
推荐指数
4
解决办法
4万
查看次数

有没有办法在可变参数宏参数上使用C++预处理器字符串?

我的猜测是这个问题的答案是否定的,但如果有办法的话会很棒.为了澄清,假设我有以下宏:

#define MY_VARIADIC_MACRO(X...) // Does some stuff here in the macro definition
Run Code Online (Sandbox Code Playgroud)

我想要做的是以某种方式对X的所有变量执行字符串化,然后将其传递给可变参数函数; 这里的关键字是之前的.我知道有没有办法真正从接入宏定义中的各个参数,但有没有办法字符串化所有参数,与可能类似于下面的东西?

#define MY_VARIADIC_MACRO(X...) some_variadic_function("some string", #X)
Run Code Online (Sandbox Code Playgroud)

c++ macros arguments variadic stringification

12
推荐指数
2
解决办法
8868
查看次数

变异的宏伎俩

创建可变参数宏的技巧是什么FOO(a1, a2, a3,..., an),它可以扩展到您选择的任何预选有界范围内的FOOn(a1, a2, a3,..., an)n?也就是说,FOO(a)应该扩展FOO1(a),FOO(a, b, c)FOO3(a, b, c)等,我知道有一个标准的把戏,但我似乎无法找到它.

请随意将此问题标记为副本,如果答案中还有其他问题,请将其关闭.我怀疑有,但我找不到它.

c c-preprocessor variadic-macros

11
推荐指数
3
解决办法
2万
查看次数

for循环宏编码风格

我在大学的一位导师建议使用宏来减少c99代码中的重复,就像这样.

#define foreach(a, b, c) for (int a = b; a < c; a++)
#define for_i foreach(i, 0, n)
#define for_j foreach(j, 0, n)
#define for_ij for_i for_j
Run Code Online (Sandbox Code Playgroud)

哪个可以这样使用:

for_ij { /*do stuff*/; }
for_i  { /*do stuff*/; }
Run Code Online (Sandbox Code Playgroud)

另一位具有工业背景的导师不鼓励使用它,声称它在他的前雇主身上被视为一种反模式(但他不知道背后的原因).实际上,通过浏览大型项目的源代码,很少能够在简短的学术范例之外找到这些结构.

我的问题是:为什么这种结构在实践中很少使用?它在某种程度上是危险的吗?

c macros loops c-preprocessor

4
推荐指数
1
解决办法
604
查看次数