我有这样的代码,旨在针对各种编译器和平台:
long value = obtainLongValue();
if(value <= 0)
handleError();
if((unsigned long)value >= (size_t)-1)
handleError();
size_t valueAsSizeT = value;
char* buffer = new char[value + 1];
技术size_t
可以小于unsigned long
或相反,或者它们可以具有相同的大小。
在某些目标上,size_t
和unsigned long
都是64位,代码实际上会检查某些内容并进行干净编译。然而,在其他目标size_t
是64位且unsigned long
是32位,对于此类平台,检查毫无意义 - long
永远不会超出size_t
溢出 - 并且所以当与-WExtra
一起使用时,gcc会发出警告:
警告:由于数据类型的范围有限[-Wtype-limits]
,因此比较始终为false
gcc在这些目标上技术上是正确的,但我需要这个检查以防万一。
如何保持检查并使用gcc干净地编译此代码?
答案 0 :(得分:3)
使用模板和专业化:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id='dd1'>
<option>select</option>
<option value='A'>A</option>
<option value='B'>B</option>
<option value='C'>C</option>
</select>
<select id='dd2'>
<option>select</option>
<option value='foo'>Foo</option>
<option value='bar'>Bar</option>
<option value='baz'>Baz</option>
</select>