C谜题{宏}

发布于 2024-10-17 00:33:26 字数 365 浏览 3 评论 0原文

我在某处遇到了以下难题

#include <stdio.h>
int main()
{
    {

        /*Fill in something here to make this code compile  
           ........... 
         */   
        ooOoO+=a;    
    } 
    #undef ooOoO 
    printf("%d",ooOoO); 

    return 0;
}

简而言之,我想问在 printf 被 #undef 编辑后,如何在 printf 中使用 ooOoO

I came across the following puzzle somewhere

#include <stdio.h>
int main()
{
    {

        /*Fill in something here to make this code compile  
           ........... 
         */   
        ooOoO+=a;    
    } 
    #undef ooOoO 
    printf("%d",ooOoO); 

    return 0;
}

In short I want to ask how can I use ooOoO in printf after it has been #undef ed?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

风吹过旳痕迹 2024-10-24 00:33:26

您需要将其声明为变量:

#define ooOoO int ooOoO = 42; int a = 1; { ooOoO

宏替换是非递归的;当 ooOoO 被替换时,标识符 ooOoO 将不会被视为宏名称。


如果您正在寻找使用宏的解决方案,那么您可以简单地忽略#undef指令,并且永远不要将ooOoO声明为宏。在 C 和 C++ 中都允许使用 #undef 未定义为宏的标识符。

You need to declare it as a variable:

#define ooOoO int ooOoO = 42; int a = 1; { ooOoO

Macro-replacement is non-recursive; while ooOoO is being replaced, the identifier ooOoO will not be treated as a macro name.


If you are looking for a solution that does not use a macro, then you can simply ignore the #undef directive and never declare ooOoO as a macro. It is permitted in both C and C++ to #undef an identifier that is not defined as a macro.

尴尬癌患者 2024-10-24 00:33:26

重新格式化代码(缩进)并添加解决方案后,这就是我收到的内容:

#include <stdio.h>
int main()
{
    {
/*-Insert starts here-*/
    }
    int ooOoO = 0, a=3;
    {
/*-Insert ends here-*/
        ooOoO+=a;      
    }       
    #undef ooOoO 
    printf("%d",ooOoO);       
    return 0;
}

编译并打印 3

After reformatting the code (indent) and adding the solution, that's what I receive:

#include <stdio.h>
int main()
{
    {
/*-Insert starts here-*/
    }
    int ooOoO = 0, a=3;
    {
/*-Insert ends here-*/
        ooOoO+=a;      
    }       
    #undef ooOoO 
    printf("%d",ooOoO);       
    return 0;
}

compiles and prints 3

猫性小仙女 2024-10-24 00:33:26

这个怎么样?

#include <stdio.h>
int main(){
    int ooOoO = 0;
    {
        int a = 3;
        ooOoO+=a;
    }
    #undef ooOoO
    printf("%d",ooOoO);

    return 0;
}

How about this?

#include <stdio.h>
int main(){
    int ooOoO = 0;
    {
        int a = 3;
        ooOoO+=a;
    }
    #undef ooOoO
    printf("%d",ooOoO);

    return 0;
}
放赐 2024-10-24 00:33:26
#include <stdio.h>
int main(){
{

      /*Fill in something here to make this code compile  

*/
}
int a = 0, ooOoO=0;
#define ooOoO ooOoO
{
/*
      */   
              ooOoO+=a;    
          } 
          #undef ooOoO 
          printf("%d",ooOoO); 

return 0;
}
#include <stdio.h>
int main(){
{

      /*Fill in something here to make this code compile  

*/
}
int a = 0, ooOoO=0;
#define ooOoO ooOoO
{
/*
      */   
              ooOoO+=a;    
          } 
          #undef ooOoO 
          printf("%d",ooOoO); 

return 0;
}
没有心的人 2024-10-24 00:33:26

#undef 取消对预处理器的符号定义,以便它不会被其他东西替换,但 ooOoO 仍然到达编译器。

The #undef undefines the symbol to the preprocessor so that it does not get substituted with something else, but ooOoO still gets to the compiler.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文