2012-01-03 125 views
0

我怎麼可以(如果我可以)設置默認的int變量(在一個特定的程序)是unsigned int?定義默認int爲無符號int

我的意思是,如果int是在程序中編寫的,編譯器將它視爲unsigned int

我的編譯器是gcc 4.6.2

編輯:我沒有被授權接觸的代碼。

+0

不知道這是個好主意......但也許是宏? – Mysticial 2012-01-03 21:27:53

+0

你真的不應該那樣做。 – 2012-01-03 21:28:40

+1

這似乎是一個非常糟糕的主意。 – 2012-01-03 21:28:57

回答

3

由於定義爲簽名類型(§ 6.2.5/4),您無法更改int的默認簽名。考慮main函數必須返回類型int(§ 5.1.2.2.1/1),如果您以某種方式更改默認簽名,那麼main將返回unsigned int,這將導致未定義的行爲,使整個應用程序相對無用。

不能創建一個宏,因爲如果int擴大到unsigned int,然後如果你已經聲明unsigned int地方,你將最終unsigned unsigned int,這是不是有效的類型。

+0

哎呀,對不起,問題標記爲C++,但我引用了C規範中的子句,但我或多或少地堅持認爲C++中也適用相同的限制。 – dreamlax 2012-01-03 22:18:54

+0

謝謝,現在我明白了這個問題。爲什麼很難讓一些人回答這個(或者像這樣)簡單的答案。爲什麼要回答超邪惡的答案?爲什麼? – yoni 2012-01-04 19:36:25

1

超級邪惡

#define int unsigned int 

可以工作,但絕對不符合標準的,你可能需要讓你的編譯器是那麼嚴格(這是一件壞事)。

你可以做其他的事情是查找和替換的int所有出現(沒有前面的unsigned)和替換那些my_typedefed_int並添加

typedef unsigned int my_typedefed_int 

這是符合標準的,但更復雜,並且可能不是可能。

+0

第二個建議的目的究竟是什麼?那麼他可以用'unsigned int'替代所有'int'的出現。 – 2012-01-03 21:32:17

+0

Niklas:它將允許其他類型以簡單和透明的方式使用/測試。 – rubenvb 2012-01-03 21:34:57

+0

@Niklas Baumstark:有了第二個建議,一旦op認識到對所有東西使用unsigned int是一個壞主意,他將能夠通過修改一行代碼來切換全局類型(int),而不是使用大量的搜索/替換整個項目。 – SigTerm 2012-01-03 21:38:03

相關問題