Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在if语句中使用switch cases_C++_Linux_Gcc - Fatal编程技术网

C++ 在if语句中使用switch cases

C++ 在if语句中使用switch cases,c++,linux,gcc,C++,Linux,Gcc,我们可以使用条件在switch语句中包含事例吗 我的代码: 开关菜单\u选项 { 如果g_登录 { 案例“L”: cout您的代码上面没有任何案例。 你不能这样做。这个案例很可能被编译成一条CPU指令,它只对整数有效。 您必须使用case并对这两种情况执行两次if。代码上方没有case。 你不能这样做。这个案例很可能被编译成一条CPU指令,它只对整数有效。 您必须使用该案例并对这两种情况执行两次if。目前,程序控制从未到达if g_登录,因此从未对其进行计算。您的有用编译器发出警告 实际上,虽然

我们可以使用条件在switch语句中包含事例吗

我的代码:

开关菜单\u选项 { 如果g_登录 { 案例“L”:
cout您的代码上面没有任何案例。 你不能这样做。这个案例很可能被编译成一条CPU指令,它只对整数有效。
您必须使用case并对这两种情况执行两次if。

代码上方没有case。 你不能这样做。这个案例很可能被编译成一条CPU指令,它只对整数有效。
您必须使用该案例并对这两种情况执行两次if。

目前,程序控制从未到达if g_登录,因此从未对其进行计算。您的有用编译器发出警告

实际上,虽然开关块只不过是一组受控的goto语句,但您可以使用

switch(menu_option){
    foo:
    if (g_logged_in){
使用goto-foo;程序控制达到的某个地方,尽管由于可读性和可维护性,这种想法是不明智的。以下代码段是Hello World!程序的重新格式:

#include <iostream>
int main(){
    switch (1){
    foo:
    if (true){
        case 0:
            std::cout << " World!\n";
            break;
        case 1:
            std::cout << "Hello";
            goto foo;
        }
    }   
}

有关开关块内交错控制循环的实际使用案例,请参阅达夫设备:

当前,如果g_登录,程序控制将永远无法到达,因此从未对其进行评估。您有用的编译器将发出警告

实际上,虽然开关块只不过是一组受控的goto语句,但您可以使用

switch(menu_option){
    foo:
    if (g_logged_in){
使用goto-foo;程序控制达到的某个地方,尽管由于可读性和可维护性,这种想法是不明智的。以下代码段是Hello World!程序的重新格式:

#include <iostream>
int main(){
    switch (1){
    foo:
    if (true){
        case 0:
            std::cout << " World!\n";
            break;
        case 1:
            std::cout << "Hello";
            goto foo;
        }
    }   
}
有关开关块内交错控制回路的实际使用案例,请参阅Duff的设备:

您不能有条件地指定case语句。您必须执行以下操作:

切换菜单\u选项 { 案例“L”: //在C++17及更高版本中,可以取消注释以下内容 //属性以避免编译器警告。。。 // //[[fallthrough]]; 案例S: 如果g_登录 { 如果菜单_选项=='L' cout您不能有条件地指定case语句。您必须执行以下操作:

切换菜单\u选项 { 案例“L”: //在C++17及更高版本中,可以取消注释以下内容 //属性以避免编译器警告。。。 // //[[fallthrough]]; 案例S: 如果g_登录 { 如果菜单_选项=='L'
正如警告所说:这些语句永远不会被执行。@πάνταῥεῖ 因此,问题是,无论如何都不可能?我应该只在case中包含if语句吗?无论如何都不可能?好吧,请定义可能。至少代码可以编译,但不会做你想做的。正如警告所说:这些语句永远不会被执行。@πάνταῥεῖ 因此,这个问题,无论如何都不可能。我应该把C++语句包含在这个案例中吗?不可能。无论如何,请定义可能。至少代码编译,但不会做你想要的。谢谢,这似乎回答我的问题,我已经研究了Duff的设备,但我对C++是相当新的,所以不能理解它。Aahimfared:我花了几天的时间才发现达夫的设备。@Raahimfared的现代优化程序在达夫的设备上窒息而死,所以它在设计的地方通常都没有用处。它也是一个神秘的代码。简言之,你可以放心地忽略它。注意,如果真的变为fal,if并不能真正保护案例SE仍然打印Hello。谢谢,这似乎回答了我的问题,我已经研究了Duff的设备,但我对C++是相当新的,所以不能理解它。@拉希默拉德:在Duff的设备向我透露之前,我花了几天的精神迷雾。@ RaimMieldEdman在Duff的设备上窒息而死,所以它常常不是有用的。e它的设计是这样的。它也是一个神秘的代码。简而言之,你可以安全地忽略它。请注意,如果将“真”更改为“假”,则不会真正保护案例,因为将“真”更改为“假”仍然会打印“你好”。我目前使用的是这种方式,因为问题中的代码没有执行。案例很可能被编译为CPU指令不,案例只是一个特殊的标签与指令没有任何关系,因为它们是完全不同的东西。案例标签可以通过各种方式跳转,但大多数情况下它不是一个单一的跳转指令。我目前正在使用这种方式,因为问题中的代码没有被执行。案例很可能被编译成CPU指令。不,案例只是一个特殊的实验室一个案例标签可以通过各种方式跳转,但大多数时候它不是一个跳转指令哦,哇,我从来没有想过用这些方式来做,neatOh,哇,我从来没有想过用这些方式来做,整洁