c++ - 了解编译器 - 什么都不做的声明?

标签 c++ compiler-construction

我有兴趣了解编译器如何解释语句......

项目类型是C++ IDE 是 XCode 3.2 64 位 操作系统为Mac OS X 10.6.8

注意:代码示例是一个无限循环。

在下面的代码示例或附图中。如果有的话,编译器在做什么。没有出现重大错误,也没有出现小错误(根据我当前的编译器设置)。最感兴趣的是了解 case 语句 C 中发生的事情:

    bool nrContinue;
    enum Task {

        A,
        B,
        C,
        D

    };

    nrContinue = 1;
    Task nrTask = A;

    while (nrContinue) {

        switch (nrTask) {

            case A:

                cout << endl << "Processing task: " << A;
                nrTask = B;

                break;
            case B:

                cout << endl << "Processing task: " << B;
                nrTask = C;

                break;
            case C:

                cout << endl << "Processing task: " << C;

                // --------------------------------------------------
                // Below is the statement of my misunderstanding

                D;      // What is going on at this statement

                break;
            case D:

                cout << endl << "Processing task: " << C;
                nrContinue = 0;

                break;
            default:

                cout << endl << "Default case was unexpected.";
                nrContinue = 0;

                break;

        }

    } // loop

最佳答案

一行(或更多)形式的代码

expression;

被称为表达式语句。表达式被计算,程序的状态根据表达式的副作用而改变。例如:

nrTask = C;

使程序计算表达式 nrTask = C,它具有改变 nrTask 值的副作用。

D; 计算表达式 D,它没有副作用,因此什么都不做。

该语言允许将任何表达式用作表达式语句的主体;然而,如果它没有效果,一个好的编译器应该发出警告,因为它几乎总是一个错误。如果您启用警告(-Wunused-value 仅用于该警告,或者更好的是 -Wall -Wextra 用于许多有用的警告),那么编译器应该指出您的错误像“声明无效”这样的警告。

关于c++ - 了解编译器 - 什么都不做的声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13842653/

相关文章:

c++ - 包含 vector 的对象指针的 vector 最终指向同一个对象

c++ - 自动打印GDB中最后一个表达式的值,如VisualStudio的 "Auto"watch window

c++ - 如何实现两个可以相互访问的结构体?

parsing - 这些语法 : LL1, SLR1、LR0、LR1 和 LALR1 的层次结构是什么?

c++ - 在 gcc 之前 Hook 源文件预处理器

c++ - OpenGL 在屏幕上移动多边形

c++ - 使用锁 C++ 锁定数组的元素

PHP解释器/编译器

c - 我们有 c99 子标志吗

java - 为什么java找不到JUnit框架?