第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

切換大小寫:錯誤:大小寫標(biāo)簽不減少為整數(shù)常量

切換大小寫:錯誤:大小寫標(biāo)簽不減少為整數(shù)常量

C
胡說叔叔 2019-12-04 14:42:18
int value;const int signalmin = some_function();switch(value){   case signalmin:   break;}我讀取了some_function的值,并使用該int值進(jìn)行了切換。C99編譯器返回:錯誤:案例標(biāo)簽未減少為整數(shù)常量但是我不能使用a,#define因為在執(zhí)行開關(guān)之前要讀取int值。
查看完整描述

3 回答

?
慕的地6264312

TA貢獻(xiàn)1817條經(jīng)驗 獲得超6個贊

switch標(biāo)簽必須是常量表達(dá)式,必須在編譯時對其求值。如果要分支運行時值,則必須使用if。


- const限定變量不是常量表達(dá)式,它只是一個不允許修改的值。


6.6(6)[C99和C2011標(biāo)準(zhǔn)的n1570草案]中詳細(xì)說明了整數(shù)常量表達(dá)式的形式:


6 整數(shù)常量表達(dá)式應(yīng)具有整數(shù)類型,并且僅應(yīng)具有整數(shù)常量,枚舉常量,字符常量,sizeof 結(jié)果為整數(shù)常量的_Alignof表達(dá)式,表達(dá)式和浮點常量(它們是強(qiáng)制轉(zhuǎn)換的立即數(shù))的操作數(shù)。整數(shù)常量表達(dá)式中的強(qiáng)制轉(zhuǎn)換運算符只能將算術(shù)類型轉(zhuǎn)換為整數(shù)類型,除非作為sizeofor _Alignof運算符的一部分。


僅sizeof允許結(jié)果為整數(shù)常量的表達(dá)式的限制排除了sizeof其操作數(shù)為可變長度數(shù)組的表達(dá)式。


查看完整回答
反對 回復(fù) 2019-12-04
?
肥皂起泡泡

TA貢獻(xiàn)1829條經(jīng)驗 獲得超6個贊

讓我舉例說明。在設(shè)置4.6.3了標(biāo)志的gcc版本上測試了以下內(nèi)容-std=c99 -pedantic:


#define SOME_HARDCODED_CONSTANT 0 //good

int foo(int i, int b){

    const int c=0; //bad

    int a=0; //bad


    switch(i){

        case c:     //compile error

        case a:     //compile error.

        case (b+a): //compile error

        case SOME_HARDCODED_CONSTANT: //all good

        case 5: //all good

    }

}

正如其他人指出的那樣,case無法在運行時評估參數(shù)。使用一個if-else塊來做到這一點。


查看完整回答
反對 回復(fù) 2019-12-04
?
收到一只叮咚

TA貢獻(xiàn)1821條經(jīng)驗 獲得超5個贊

在OSX上,clang似乎將常量用作大小寫標(biāo)簽,而不會產(chǎn)生抱怨。


#include <stdio.h>


#define SOME_HARDCODED_CONSTANT 0 //good for sure

int foo(int i, int b){ 

    const int c=1; //no problem!!!


    switch(i){

        case SOME_HARDCODED_CONSTANT: //all good

            printf("case SOME_HARDCODED_CONSTANT\n"); break;

        case c:     //no compile error for clang

            printf("case c\n"); break;

        case 5: //all good

            printf("case 5\n"); break;

    }   

    return i+b;

}


int main() {

    printf("test foo(1,3): %d\n", foo(1,3));

}

輸出:


$> cc test.c -o test; ./test 

case c

test foo(1,3): 4


查看完整回答
反對 回復(fù) 2019-12-04
  • 3 回答
  • 0 關(guān)注
  • 1147 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號