Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #120302

Re: Set the result of void function

From Ben Bacarisse <ben.usenet@bsb.me.uk>
Newsgroups comp.lang.c
Subject Re: Set the result of void function
Date 2017-09-25 16:32 +0100
Organization A noiseless patient Spider
Message-ID <87vak623qk.fsf@bsb.me.uk> (permalink)
References (13 earlier) <Pz5xB.203974$E%3.53744@fx01.am4> <oq30ge$n57$1@dont-email.me> <slrnosf837.14au.grahn+nntp@frailea.sa.invalid> <oqa7r8$ieq$1@dont-email.me> <2919fc6f-baa8-4ff0-a035-94ce965bd8b8@googlegroups.com>

Show all headers | View raw


Malcolm McLean <malcolm.arthur.mclean@gmail.com> writes:

> On Monday, September 25, 2017 at 7:31:12 AM UTC+1, David Brown wrote:
>> On 24/09/17 14:09, Jorgen Grahn wrote:
>
>> In C++, you know std::swap is not a macro.  As long as you are not doing
>> something programmer-unfriendly, like defining [] or ++ operators that
>> act in unexpected ways, then the ordering and effects is clear.
>> 
>> In C, this sort of thing tends to be a macro.  The operands to "swap"
>> might be evaluated several times in different orders - or they might be
>> handled in a safe manner (using compiler extensions like "typeof").  C++
>> lets you write a good "swap" function - C does not.
>>
> The C way of writing a swap is
>
> void memswap(void *ptra, void *ptrb, size_t length);

In modern C

  void memswap(void *restrict ptra, void *restrict ptrb, size_t length);

might be better.  Writing it this way makes it clear that the code is
intended to be used to swap the contents of non-overlapping objects.

> However this exposes a few weaknesses in the language. We can't force
> the types to be identical. We have to write the loop as a dumb
> bytewise copying loop to support a situation - structures with size
> that is an odd number of bytes - that is very unlikely to occur.

Why does that mean the code must use a dumb byte-wise loop?  For
example, if you know that your library memcpy is good for small
power-of-two sizes you might write:

  void mem_swap(void *restrict vp1, void *restrict vp2, size_t size)
  {
       switch (size) {
       case 1: case 2: case 4: case 8: {
            char t[8];
            memcpy(&t,  vp1, size);
            memcpy(vp1, vp2, size);
            memcpy(vp2, &t,  size);
            break;
       }
       default: {
            size_t half = 1;
            while ((half << 1) < size) half <<= 1;
            mem_swap(vp1, vp2, half);
            mem_swap((char *)vp1 + half, (char *)vp2 + half, size - half);
       }}
  }

The little dance with 'half' is to guarantee aligned moves.  When you
know the compiler, you could probably replace it with a built-in
bit-twiddling function (you with gcc).

> We can inline the code these days, but not in C89 which is still live.

This remark might give people the wrong impression.  C89 (AKA C90)
compilers are permitted to expand functions inline, and compilers for
later C versions are not obliged to even when the 'inline' qualifier is
used.  What C99 added was a mechanism to make the programmer's
intentions clear.

-- 
Ben.

Back to comp.lang.c | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Set the result of void function Thiago Adams <thiago.adams@gmail.com> - 2017-09-19 14:23 -0700
  Re: Set the result of void function Thiago Adams <thiago.adams@gmail.com> - 2017-09-19 14:38 -0700
    Re: Set the result of void function gordonb.tfand@burditt.org (Gordon Burditt) - 2017-09-19 17:16 -0500
    Re: Set the result of void function "Pascal J. Bourguignon" <pjb@informatimago.com> - 2017-09-20 00:39 +0200
      Re: Set the result of void function James Kuyper <jameskuyper@verizon.net> - 2017-09-19 22:06 -0400
        Re: Set the result of void function "Pascal J. Bourguignon" <pjb@informatimago.com> - 2017-09-20 06:51 +0200
          Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-20 10:55 +0100
            Re: Set the result of void function Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-09-20 12:11 +0100
            Re: Set the result of void function fir <profesor.fir@gmail.com> - 2017-09-20 07:17 -0700
          Re: Set the result of void function Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-09-20 11:28 +0100
          Re: Set the result of void function mark.bluemel@gmail.com - 2017-09-20 03:30 -0700
            Re: Set the result of void function fir <profesor.fir@gmail.com> - 2017-09-20 06:53 -0700
              Re: Set the result of void function Andrew Haley <andrew29@littlepinkcloud.invalid> - 2017-09-21 03:50 -0500
                Re: Set the result of void function Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-09-21 11:00 +0100
                Re: Set the result of void function scott@slp53.sl.home (Scott Lurndal) - 2017-09-21 12:39 +0000
                Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-21 14:12 +0100
                Re: Set the result of void function scott@slp53.sl.home (Scott Lurndal) - 2017-09-21 13:51 +0000
                Re: Set the result of void function Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2017-09-21 08:36 -0600
                Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-21 17:51 +0100
                Re: Set the result of void function supercat@casperkitty.com - 2017-09-21 10:06 -0700
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-22 08:51 +0200
                Plunging innocent people into poverty (Was: Set the result of void function) gazelle@shell.xmission.com (Kenny McCormack) - 2017-09-23 09:31 +0000
                Re: Plunging innocent people into poverty (Was: Set the result of void function) David Brown <david.brown@hesbynett.no> - 2017-09-23 12:09 +0200
                Re: Plunging innocent people into poverty (Was: Set the result of void function) gazelle@shell.xmission.com (Kenny McCormack) - 2017-09-23 10:25 +0000
                Re: Plunging innocent people into poverty Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2017-09-23 10:43 -0600
                Re: Plunging innocent people into poverty supercat@casperkitty.com - 2017-09-23 10:41 -0700
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-22 09:37 +0200
                Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-22 11:27 +0100
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-22 14:42 +0200
                Re: Set the result of void function Jorgen Grahn <grahn+nntp@snipabacken.se> - 2017-09-24 12:09 +0000
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-25 08:31 +0200
                Re: Set the result of void function Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2017-09-25 03:52 -0700
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-25 13:25 +0200
                Re: Set the result of void function Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2017-09-25 04:58 -0700
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-25 14:20 +0200
                Re: Set the result of void function Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-09-25 13:44 +0100
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-25 15:09 +0200
                Re: Set the result of void function Thiago Adams <thiago.adams@gmail.com> - 2017-09-25 05:44 -0700
                Re: Set the result of void function Thiago Adams <thiago.adams@gmail.com> - 2017-09-25 05:58 -0700
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-25 15:15 +0200
                Re: Set the result of void function Thiago Adams <thiago.adams@gmail.com> - 2017-09-25 06:46 -0700
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-25 16:01 +0200
                Re: Set the result of void function Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2017-09-25 07:18 -0700
                Re: Set the result of void function Thiago Adams <thiago.adams@gmail.com> - 2017-09-25 07:55 -0700
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-25 08:49 -0700
                Re: Set the result of void function Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2017-09-25 09:21 -0700
                Re: Set the result of void function supercat@casperkitty.com - 2017-09-25 09:51 -0700
                Re: Set the result of void function Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-09-25 21:57 +0100
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-25 15:03 -0700
                Re: Set the result of void function Öö Tiib <ootiib@hot.ee> - 2017-09-25 21:34 -0700
                Re: Set the result of void function Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2017-09-26 04:28 -0700
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-27 08:26 +0200
                Re: Set the result of void function "James R. Kuyper" <jameskuyper@verizon.net> - 2017-09-27 11:48 -0400
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-28 08:54 +0200
                Re: Set the result of void function gordonb.iddsu@burditt.org (Gordon Burditt) - 2017-09-28 23:33 -0500
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-27 09:15 -0700
                Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-27 17:50 +0100
                Re: Set the result of void function jameskuyper@verizon.net - 2017-09-27 10:35 -0700
                Re: Set the result of void function Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-09-27 18:47 +0100
                Re: Set the result of void function supercat@casperkitty.com - 2017-09-27 10:52 -0700
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-27 11:10 -0700
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-28 09:10 +0200
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-27 11:06 -0700
                Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-27 20:01 +0100
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-27 12:26 -0700
                Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-27 20:38 +0100
                Re: Set the result of void function jameskuyper@verizon.net - 2017-09-27 13:00 -0700
                Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-27 21:54 +0100
                Re: Set the result of void function supercat@casperkitty.com - 2017-09-27 14:12 -0700
                Re: Set the result of void function jameskuyper@verizon.net - 2017-09-27 14:34 -0700
                Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-27 23:16 +0100
                Re: Set the result of void function jameskuyper@verizon.net - 2017-09-27 16:09 -0700
                Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-28 01:12 +0100
                Re: Set the result of void function Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-09-28 02:03 +0100
                Re: Set the result of void function Ian Collins <ian-news@hotmail.com> - 2017-09-28 17:31 +1300
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-28 09:55 +0200
                Re: Set the result of void function Ian Collins <ian-news@hotmail.com> - 2017-09-28 21:00 +1300
                Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-28 10:48 +0100
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-28 13:20 +0200
                Re: Set the result of void function Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-09-28 11:29 +0100
                Re: Set the result of void function jameskuyper@verizon.net - 2017-09-27 20:27 -0700
                Re: Set the result of void function Gareth Owen <gwowen@gmail.com> - 2017-09-29 19:30 +0100
                Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-29 19:45 +0100
                Re: Set the result of void function Jerry Stuckle <jstucklex@attglobal.net> - 2017-09-29 14:49 -0400
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-27 15:07 -0700
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-28 09:42 +0200
                Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-28 13:55 +0100
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-28 17:22 +0200
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-28 09:14 -0700
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-28 20:13 +0200
                Re: Set the result of void function Gareth Owen <gwowen@gmail.com> - 2017-09-29 19:42 +0100
                Re: Set the result of void function Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2017-09-28 09:14 -0700
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-28 09:25 -0700
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-28 20:17 +0200
                Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-28 17:39 +0100
                Re: Set the result of void function jameskuyper@verizon.net - 2017-09-28 10:10 -0700
                Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-28 19:05 +0100
                Re: Set the result of void function "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2017-09-28 14:20 -0400
                Re: Set the result of void function Ian Collins <ian-news@hotmail.com> - 2017-09-29 07:52 +1300
                Re: Set the result of void function jameskuyper@verizon.net - 2017-09-28 11:59 -0700
                Re: Set the result of void function Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-09-28 18:50 +0100
                Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-28 19:47 +0100
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-28 21:57 +0200
                Re: Set the result of void function "James R. Kuyper" <jameskuyper@verizon.net> - 2017-09-28 16:14 -0400
                Re: Set the result of void function supercat@casperkitty.com - 2017-09-28 13:17 -0700
                Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-28 21:23 +0100
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-28 13:55 -0700
                Re: Set the result of void function Gareth Owen <gwowen@gmail.com> - 2017-09-29 19:50 +0100
                Re: Set the result of void function jameskuyper@verizon.net - 2017-09-28 13:57 -0700
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-28 23:18 +0200
                Re: Set the result of void function "James R. Kuyper" <jameskuyper@verizon.net> - 2017-09-28 17:38 -0400
                Re: Set the result of void function supercat@casperkitty.com - 2017-09-28 15:54 -0700
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-29 08:59 +0200
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-28 14:43 -0700
                Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-29 10:43 +0200
                Re: Set the result of void function supercat@casperkitty.com - 2017-09-29 07:43 -0700
                Re: Set the result of void function Gareth Owen <gwowen@gmail.com> - 2017-09-30 19:21 +0100
                Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-30 19:45 +0100
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-28 13:31 -0700
                Re: Set the result of void function supercat@casperkitty.com - 2017-09-28 13:41 -0700
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-28 14:07 -0700
                Re: Set the result of void function David Kleinecke <dkleinecke@gmail.com> - 2017-09-28 16:25 -0700
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-28 18:45 -0700
                Re: Set the result of void function David Kleinecke <dkleinecke@gmail.com> - 2017-09-28 19:54 -0700
                Re: Set the result of void function jameskuyper@verizon.net - 2017-09-28 20:51 -0700
                Re: Set the result of void function David Kleinecke <dkleinecke@gmail.com> - 2017-09-28 22:39 -0700
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-29 09:16 -0700
                Re: Set the result of void function gazelle@shell.xmission.com (Kenny McCormack) - 2017-09-29 16:17 +0000
                Re: Set the result of void function David Kleinecke <dkleinecke@gmail.com> - 2017-09-29 11:05 -0700
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-29 11:23 -0700
                Re: Set the result of void function supercat@casperkitty.com - 2017-09-29 12:15 -0700
                Re: Set the result of void function David Kleinecke <dkleinecke@gmail.com> - 2017-09-29 16:04 -0700
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-29 16:44 -0700
                Re: Set the result of void function David Kleinecke <dkleinecke@gmail.com> - 2017-09-30 10:04 -0700
                Re: Set the result of void function supercat@casperkitty.com - 2017-09-30 10:33 -0700
                Re: Set the result of void function jameskuyper@verizon.net - 2017-09-29 11:26 -0700
                Re: Set the result of void function David Kleinecke <dkleinecke@gmail.com> - 2017-09-29 16:03 -0700
                Re: Set the result of void function jameskuyper@verizon.net - 2017-09-29 09:44 -0700
                Re: Set the result of void function David Kleinecke <dkleinecke@gmail.com> - 2017-09-29 11:15 -0700
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-29 11:35 -0700
                Re: Set the result of void function David Kleinecke <dkleinecke@gmail.com> - 2017-09-29 16:11 -0700
                Re: Set the result of void function David Kleinecke <dkleinecke@gmail.com> - 2017-09-29 16:14 -0700
                Re: Set the result of void function supercat@casperkitty.com - 2017-09-30 08:55 -0700
                Re: Set the result of void function jameskuyper@verizon.net - 2017-09-29 11:36 -0700
                Re: Set the result of void function Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-09-29 12:05 +0100
                Re: Set the result of void function Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-09-29 12:17 +0100
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-29 09:15 -0700
                Re: Set the result of void function Ian Collins <ian-news@hotmail.com> - 2017-09-29 09:42 +1300
                Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-28 21:55 +0100
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-28 14:12 -0700
                Re: Set the result of void function "James R. Kuyper" <jameskuyper@verizon.net> - 2017-09-28 17:22 -0400
                Re: Set the result of void function Gareth Owen <gwowen@gmail.com> - 2017-09-29 19:50 +0100
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-28 09:00 -0700
                Re: Set the result of void function supercat@casperkitty.com - 2017-09-28 09:35 -0700
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-28 10:57 -0700
                Re: Set the result of void function Thiago Adams <thiago.adams@gmail.com> - 2017-09-25 10:35 -0700
                Re: Set the result of void function Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2017-09-25 06:57 -0700
                Re: Set the result of void function Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-09-25 16:32 +0100
                Re: Set the result of void function Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2017-09-25 08:43 -0700
                Re: Set the result of void function Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-09-25 22:12 +0100
                Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-25 09:03 -0700
                Re: Set the result of void function Jorgen Grahn <grahn+nntp@snipabacken.se> - 2017-09-25 14:17 +0000
          Re: Set the result of void function "James R. Kuyper" <jameskuyper@verizon.net> - 2017-09-20 11:32 -0400
        Re: Set the result of void function fir <profesor.fir@gmail.com> - 2017-09-20 01:50 -0700
          Re: Set the result of void function David Kleinecke <dkleinecke@gmail.com> - 2017-09-20 15:56 -0700
  Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-19 23:01 +0100
    Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-20 15:40 +0200
      Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-20 08:50 -0700
        Re: Set the result of void function David Brown <david.brown@hesbynett.no> - 2017-09-20 22:52 +0200
          Re: Set the result of void function supercat@casperkitty.com - 2017-09-20 15:04 -0700
    Re: Set the result of void function supercat@casperkitty.com - 2017-09-20 07:39 -0700
  Re: Set the result of void function jameskuyper@verizon.net - 2017-09-19 15:18 -0700
    Re: Set the result of void function bartc <bc@freeuk.com> - 2017-09-20 01:21 +0100
      Re: Set the result of void function jameskuyper@verizon.net - 2017-09-19 19:40 -0700
  Re: Set the result of void function rockbrentwood@gmail.com - 2017-09-19 16:36 -0700
    Re: Set the result of void function James Kuyper <jameskuyper@verizon.net> - 2017-09-19 22:13 -0400
    Re: Set the result of void function gazelle@shell.xmission.com (Kenny McCormack) - 2017-09-22 01:48 +0000
  Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-19 19:36 -0700
  Re: Set the result of void function mark.bluemel@gmail.com - 2017-09-20 01:00 -0700
    Re: Set the result of void function fir <profesor.fir@gmail.com> - 2017-09-20 02:01 -0700
  Re: Set the result of void function Keith Thompson <kst-u@mib.org> - 2017-09-20 08:36 -0700
  Re: Set the result of void function "James R. Kuyper" <jameskuyper@verizon.net> - 2017-09-20 11:36 -0400
  Re: Set the result of void function John Bode <jfbode1029@gmail.com> - 2017-09-20 15:30 -0700

csiph-web