1. 程式人生 > >switch的三個注意點

switch的三個注意點

第一點

看別人程式碼時容易忘記這個知識點,影響理解。

switch ( pElements->Rule.ulId )
        {
		case VID_Hello:
		case VID_Stops:
		case VID_Out:
                case VID_Navigation:
                {
                    ……
                    break;
                }
		case VID_Place:
		{
                    ……               

                    break;
		}
                ……
        }
        // Free the pElements memory which was allocated for us
        ::CoTaskMemFree(pElements);
    }

在執行switch語句時,根據switch後面的表示式的值找到匹配的入口標號,就從此標號開始執行下去,直到遇到break;或者return;當多個分支有統一的處理邏輯時就可以統一處理。

第二點 

不能匹配字串

第三點

這個知識點修改幾次了,還是學到了些東西的,如下:

  • 在塊作用域{}內宣告的變數,出了}就不在起作用。對於{},可能用的更多的是跟在函式名後面/程式語言本書if(){}else{}等結構。也可以這樣用:
    {
    	int i=0;
    	printf("%d\n",i);  // 僅以此代表你要做的事,在這件事裡i是一個重要的臨時變數
    }
    	
    {
    	int i=11;
    	printf("%d\n",i);  // 僅以此代表你要做的事,在這件事裡i是一個重要的臨時變數
    }
  • C語言是不允許在中間宣告變數的,這點不知道最新的標準是不是更新了,有點用最新標準測試,sorry,最近才想到,新標準測試環境搭好。
  • 對於這段程式碼:
    for(int i=0;i<10;i++)
    { 
    	printf("%d\n",i);
    }
    ·C語言編譯會出現如下錯誤提示:把int i=0;提到for語句前就OK。
    ·C++是OK的。

程式碼描述-1

#include <stdio.h>
int main(void)  
{     
    char c = 't' ;
    switch( c ){
    case 't':
        printf("Case t\n");
        break;
    case 'u':
        char t2 = '2';
        printf("t2:%c\n",t2);
        break;
    default:
        printf("This is default.\n");
        break;
    }
    return 0;
}

編譯錯誤:測試環境 Visual Studio 2010 Win32Console

C:在u分支中加{},或者把char t2的宣告放在switch語句前就OK,C++:在u分支中加{},把char t2的宣告放在switch語句前或者把default分支去掉就OK這應該跟編譯器的編譯原理有關,這是什麼機制呢,或者是C/C++標準的一個什麼規則?有待解決。這樣看來,最好在每個分支中都加{}。


程式碼描述-2

#include <stdio.h>
int main(void)  
{      
	int a=1;      
	switch(a)      
	{     
		{int b=20;}  
	case 1: 
		printf("b is %d\n",b);
		break;
	default:
		printf("b is %d\n",b);
		break;
	}
	return 0;
}
編譯錯誤

把{int b=20;}外的大括號去掉後,編譯通過,但是編譯警告:

輸出的b的值是未知的。這樣看來,這種情況下只是跳過了b的初始化步驟。

在CSDN論壇上發了個帖子,大家的回答還是給了我很多提示的。不得不承認自己是菜鳥的事實,這麼簡單的問題都沒想到。帖子連結