3 回答

TA貢獻1772條經驗 獲得超8個贊
聲明枚舉變量是這樣完成的:
enum strategy {RANDOM, IMMEDIATE, SEARCH};
enum strategy my_strategy = IMMEDIATE;
但是,您可以使用a typedef來縮短變量聲明,如下所示:
typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy my_strategy = IMMEDIATE;
有一個命名約定來區(qū)分類型和變量是一個好主意:
typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy_type;
strategy_type my_strategy = IMMEDIATE;

TA貢獻1780條經驗 獲得超5個贊
這是值得指出的是,你并不需要一個typedef。你可以像下面這樣
enum strategy { RANDOM, IMMEDIATE, SEARCH };
enum strategy my_strategy = IMMEDIATE;
您是否喜歡這是一個風格問題typedef。沒有它,如果要引用枚舉類型,則需要使用enum strategy。有了它,您可以說strategy。
兩種方式各有利弊。一個比較羅word,但將類型標識符保留在標記名稱空間中,在這里它們不會與普通標識符沖突(請考慮struct stat和stat函數:它們也不會沖突),并且您會立即看到它是一種類型。另一個較短,但是將類型標識符帶入普通名稱空間。

TA貢獻1868條經驗 獲得超4個贊
您嘗試聲明strategy兩次,這就是為什么您遇到上述錯誤的原因。以下作品沒有任何投訴(與一起編譯gcc -ansi -pendantic -Wall):
#include <stdio.h>
enum { RANDOM, IMMEDIATE, SEARCH } strategy = IMMEDIATE;
int main(int argc, char** argv){
printf("strategy: %d\n", strategy);
return 0;
}
如果不是上述內容,則將第二行更改為:
...
enum { RANDOM, IMMEDIATE, SEARCH } strategy;
strategy = IMMEDIATE;
...
從警告中,您可以輕松看到您的錯誤:
enums.c:5:1: warning: data definition has no type or storage class [enabled by default]
enums.c:5:1: warning: type defaults to ‘int’ in declaration of ‘strategy’ [-Wimplicit-int]
enums.c:5:1: error: conflicting types for ‘strategy’
enums.c:4:36: note: previous declaration of ‘strategy’ was here
因此,編譯器接受strategy = IMMEDIATE了一個聲明為strategydefault type 的變量的聲明int,但是之前已經有一個使用此名稱的變量聲明。
但是,如果您將分配放在main()函數中,則它將是有效的代碼:
#include <stdio.h>
enum { RANDOM, IMMEDIATE, SEARCH } strategy = IMMEDIATE;
int main(int argc, char** argv){
strategy=SEARCH;
printf("strategy: %d\n", strategy);
return 0;
}
- 3 回答
- 0 關注
- 1404 瀏覽
添加回答
舉報