gpt4 book ai didi

c++ - pragma push/pop_macro指令堆栈是每个宏唯一的吗?

转载 作者:行者123 更新时间:2023-12-02 10:11:38 24 4
gpt4 key购买 nike

微软提供了following example:

// pragma_directives_pop_macro.cpp
// compile with: /W1
#include <stdio.h>
#define X 1
#define Y 2

int main() {
printf("%d",X);
printf(" %d",Y);
#define Y 3 // C4005
#pragma push_macro("Y")
#pragma push_macro("X")
printf(" %d",X);
#define X 2 // C4005
printf(" %d",X);
#pragma pop_macro("X")
printf(" %d",X);
#pragma pop_macro("Y")
printf(" %d",Y);
}
输出:1 2 1 2 1 3
宏“Y”和宏“X”是否有单独的堆栈,还是对所有宏使用相同的堆栈?

最佳答案

每个宏都有自己的堆栈。正如您链接到的文档所述, push_macro “将宏名称宏的值保存在该宏堆栈的顶部”,而 pop_macro “将宏名称宏的值设置为顶部的值宏堆栈中的一个。”
我们可以使用以下代码确认这种解释:不按后进先出的顺序弹出XY,但分别恢复最初为XY推送的值:

#include <stdio.h>

int main(void)
{
#define X "X0"
#define Y "Y0"
printf("X=%s.\n", X);
printf("Y=%s.\n", Y);
#pragma push_macro("X")
printf("Pushed X.\n");
#pragma push_macro("Y")
printf("Pushed Y.\n");
#undef X
#undef Y
#define X "X1"
#define Y "Y1"
printf("X=%s.\n", X);
printf("Y=%s.\n", Y);
#pragma pop_macro("X")
printf("Popped X.\n");
#pragma pop_macro("Y")
printf("Popped Y.\n");
printf("X=%s.\n", X);
printf("Y=%s.\n", Y);
}
which prints:
X = X0
Y = Y0。
推X。
推Y。
X = X1
Y = Y1
弹出X。
弹出Y。
X = X0
Y = Y0

关于c++ - pragma push/pop_macro指令堆栈是每个宏唯一的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63327260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com