定义默认int为无符号int

问题描述:

我怎么可以(如果我可以)设置默认的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

由于定义为签名类型(§ 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

超级邪恶

#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