相关疑难解决方法(0)

C++预处理器#define-ing a keyword.标准是否符合标准?

这个关于bool和1的问题的评论中帮助解决正在进行的辩论:

符合标准的C++预处理器是否允许#define用户重新定义语言关键字?如果是这样,符合标准的C++预处理器是否允许这样做?

如果C++程序重新定义了一个语言关键字,那么该程序本身是否符合标准?

c++ c-preprocessor

20
推荐指数
3
解决办法
4458
查看次数

C/C++中可破坏的命名范围

介绍

这个问题来自于这个问题:命名循环成语:危险吗?.对于那些不想阅读原始问题的人来说,这是关于做这样的事情:

named(label1) for(int i = 0 ; i < 10 ; i++) {
    for(int j = 0 ; j < 10 ; j++) {
      if(some_condition)
            break(label1); // exit outer loop
      }
}
Run Code Online (Sandbox Code Playgroud)

这个新问题是关于"命名循环"习语的改进版本.如果你懒得阅读这篇文章,你可以直接转到这篇文章的"例子"部分,清楚地了解我在说什么.

设计缺陷

不幸的是,这个问题很快就结束了(后来又被重新开放)因为它更像是一个利弊辩论,而不是一个纯粹的技术问题.它似乎不符合SO Q&A格式.而且,我提出的代码有几个缺陷:

  • 该关键字break由宏重新定义
  • 宏使用小写字母书写
  • 它使一些可怕的东西可编译(至少使用MSVC):

    int foo() {
    
       named(label1) for(int i = 0 ; i < 10; i++)
       {
          if(some_condition)
          {
              break(label1);  // here it's ok, the behavior is obvious
          }   
       }
    
       break(label1); // it compiles fine without warning... but the …
    Run Code Online (Sandbox Code Playgroud)

c c++ macros idioms goto

5
推荐指数
1
解决办法
2191
查看次数

标签 统计

c++ ×2

c ×1

c-preprocessor ×1

goto ×1

idioms ×1

macros ×1