Related articles |
---|
[33 earlier articles] |
Re: Optimization techniques david.brown@hesbynett.no (David Brown) (2019-05-01) |
Re: Optimization techniques david.brown@hesbynett.no (David Brown) (2019-05-01) |
Re: Optimization techniques martin@gkc.org.uk (Martin Ward) (2019-05-02) |
Re: Optimization techniques 847-115-0292@kylheku.com (Kaz Kylheku) (2019-05-02) |
Re: Optimization techniques 847-115-0292@kylheku.com (Kaz Kylheku) (2019-05-02) |
Re: Optimization techniques robin51@dodo.com.au (Robin Vowels) (2019-05-07) |
Re: Optimization techniques david.brown@hesbynett.no (David Brown) (2019-05-07) |
Re: Optimization techniques rockbrentwood@gmail.com (2019-09-26) |
From: | David Brown <david.brown@hesbynett.no> |
Newsgroups: | comp.compilers |
Date: | Tue, 7 May 2019 16:43:42 +0200 |
Organization: | A noiseless patient Spider |
References: | <72d208c9-169f-155c-5e73-9ca74f78e390@gkc.org.uk> 19-04-020 19-04-025 |
Injection-Info: | gal.iecc.com; posting-host="news.iecc.com:2001:470:1f07:1126:0:676f:7373:6970"; logging-data="27511"; mail-complaints-to="abuse@iecc.com" |
Keywords: | C, standards |
Posted-Date: | 07 May 2019 18:47:56 EDT |
Content-Language: | en-GB |
On 26/04/2019 10:33, alexfrunews@gmail.com wrote:
> On Thursday, April 25, 2019 at 1:14:54 PM UTC-7, Martin Ward wrote:
> ...
>> With the current situation, anyone wanting to avoid
>> undefined behaviour (and don't we all?) has to write code like
>> this for any signed operation:
>>
>> signed int sum;
>> if (((si_b > 0) && (si_a > (INT_MAX - si_b))) ||
>> ((si_b < 0) && (si_a < (INT_MIN - si_b)))) {
>> /* Handle error */
>> } else {
>> sum = si_a + si_b;
>> }
>
> In this day and age it is a shame that the language that is still very
> much alive does not provide the programmer with easy-to-use (and
> implement!) tools to perform/handle:
>
> - overflow checks like the above for +, -, *, /,
> %, <<, both signed and unsigned
> - mathematically meaningful comparison of signed
> and unsigned integers
> - arithmetic right shift out of the box
> - ditto rotation
> - arbitrary precision arithmetic (for integers
> of compile-time-constant length)
> - endianness at last
> - (I probably forget many more)
>
One possible consideration here is that C, these days, regularly means
gcc and/or clang. These dominate the C compiler market to a very large
extent. And they both have support for overflow checks (and wrapping
signed arithmetic, if you want). Some other compilers I have used have
copied extensions from gcc.
Still, a major point of C is that it does not change much - it is
intentionally kept (relatively) small and as stable as possible.
Return to the
comp.compilers page.
Search the
comp.compilers archives again.