Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c > #161260 > unrolled thread
| Started by | James Harris <james.harris.1@gmail.com> |
|---|---|
| First post | 2021-06-06 13:16 +0100 |
| Last post | 2021-06-17 19:30 +0200 |
| Articles | 20 on this page of 391 — 31 participants |
Back to article view | Back to comp.lang.c
Why does C allow structs to have a tag? James Harris <james.harris.1@gmail.com> - 2021-06-06 13:16 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-06-06 15:27 +0200
Re: Why does C allow structs to have a tag? Thiago Adams <thiago.adams@gmail.com> - 2021-06-07 06:00 -0700
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-06-07 18:06 +0200
Re: Why does C allow structs to have a tag? Öö Tiib <ootiib@hot.ee> - 2021-06-06 06:34 -0700
Re: Why does C allow structs to have a tag? James Harris <james.harris.1@gmail.com> - 2021-06-06 16:33 +0100
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-06 14:59 +0100
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-06-06 15:05 +0000
Re: Why does C allow structs to have a tag? Manfred <noname@add.invalid> - 2021-06-06 18:58 +0200
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-06-06 21:12 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-06 21:02 +0100
Re: Why does C allow structs to have a tag? Richard Harnden <richard.nospam@gmail.com> - 2021-06-06 21:25 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-06-06 15:13 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-06 23:55 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-06-06 17:02 -0700
Re: Why does C allow structs to have a tag? James Harris <james.harris.1@gmail.com> - 2021-06-07 18:42 +0100
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-07 19:39 +0100
Re: Why does C allow structs to have a tag? Manfred <noname@add.invalid> - 2021-06-07 17:15 +0200
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-06-07 12:03 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-07 20:55 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-06-07 22:17 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-07 21:54 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-06-07 13:22 -0700
Re: Why does C allow structs to have a tag? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-06-07 13:36 -0700
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-06-07 08:52 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-07 11:06 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-06-07 13:25 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-07 13:00 +0100
Re: Why does C allow structs to have a tag? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-06-07 07:25 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-07 16:31 +0100
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-06-07 16:15 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-07 17:53 +0100
Re: Why does C allow structs to have a tag? James Harris <james.harris.1@gmail.com> - 2021-06-07 19:02 +0100
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-06-07 22:26 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-08 00:19 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-06-07 17:06 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-08 11:13 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-06-08 11:43 -0700
Re: Why does C allow structs to have a tag? James Harris <james.harris.1@gmail.com> - 2021-06-07 18:54 +0100
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-07 19:57 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-06-06 15:10 -0700
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-06-06 14:51 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-06 16:05 +0100
Re: Why does C allow structs to have a tag? James Kuyper <jameskuyper@alumni.caltech.edu> - 2021-06-06 14:20 -0400
Re: Why does C allow structs to have a tag? Richard Damon <Richard@Damon-Family.org> - 2021-06-06 15:03 -0400
Re: Why does C allow structs to have a tag? James Harris <james.harris.1@gmail.com> - 2021-06-07 18:38 +0100
Re: Why does C allow structs to have a tag? Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2021-06-08 08:06 -0600
Re: Why does C allow structs to have a tag? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-06-08 07:45 -0700
Re: Why does C allow structs to have a tag? Guillaume <message@bottle.org> - 2021-06-08 17:09 +0200
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-06-08 16:00 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-08 17:23 +0100
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-06-08 18:59 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-09 00:22 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-06-08 16:53 -0700
Re: Why does C allow structs to have a tag? James Kuyper <jameskuyper@alumni.caltech.edu> - 2021-06-09 11:40 -0400
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-09 17:36 +0100
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-06-09 17:48 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-09 20:19 +0100
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-06-09 21:28 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-09 23:47 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-06-10 11:14 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-10 12:38 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-06-10 15:30 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-10 15:18 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-06-10 16:55 +0200
Re: Why does C allow structs to have a tag? Manfred <noname@add.invalid> - 2021-06-10 17:23 +0200
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-06-10 20:47 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-10 17:19 +0100
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-11 09:52 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-06-11 11:25 +0200
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-06-11 12:00 -0700
Re: Why does C allow structs to have a tag? Guillaume <message@bottle.org> - 2021-06-11 21:14 +0200
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-06-11 19:46 +0000
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-06-11 15:28 -0700
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-06-11 15:06 -0700
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-06-11 15:08 -0700
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-06-12 00:32 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-11 22:32 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-06-11 15:17 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-11 23:29 +0100
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-06-11 23:21 +0000
Re: Why does C allow structs to have a tag? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-06-12 00:39 +0100
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-12 01:11 +0100
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-06-12 00:51 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-12 11:08 +0100
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-06-12 16:12 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-12 18:36 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-06-12 13:06 -0700
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-06-12 12:42 -0700
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-06-12 14:13 +0200
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-06-10 15:16 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-10 16:45 +0100
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-06-10 16:56 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-10 19:32 +0100
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-09 22:37 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-06-09 15:12 -0700
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-06-09 23:18 +0000
Re: Why does C allow structs to have a tag? Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2021-06-08 09:25 -0600
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-06-08 16:13 +0000
Re: Why does C allow structs to have a tag? Richard Damon <Richard@Damon-Family.org> - 2021-06-08 21:43 -0400
Re: Why does C allow structs to have a tag? John Bode <jfbode1029@gmail.com> - 2021-06-08 15:03 -0500
Re: Why does C allow structs to have a tag? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2021-06-24 10:33 -0700
Re: Why does C allow structs to have a tag? Öö Tiib <ootiib@hot.ee> - 2021-06-24 13:45 -0700
Re: Why does C allow structs to have a tag? John Bode <jfbode1029@gmail.com> - 2021-07-01 17:57 -0500
Re: Why does C allow structs to have a tag? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2021-07-11 00:26 -0700
Re: Why does C allow structs to have a tag? John Bode <jfbode1029@gmail.com> - 2021-07-26 09:49 -0500
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-07-27 15:47 +0000
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-27 10:55 -0700
Re: Why does C allow structs to have a tag? Guillaume <message@bottle.org> - 2021-07-27 23:48 +0200
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-07-27 22:12 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-28 00:38 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-27 18:30 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-28 13:02 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-28 07:19 -0700
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-07-28 14:06 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-28 15:44 +0100
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-07-28 15:21 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-28 17:49 +0100
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-07-28 17:21 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-28 23:41 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-28 16:07 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-29 02:23 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-28 19:20 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-29 11:05 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-29 08:12 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-29 16:34 +0100
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-07-29 17:10 +0000
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-29 10:29 -0700
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-29 10:28 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-29 19:07 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-29 11:16 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-29 19:41 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-29 12:43 -0700
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-07-30 15:06 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-30 16:31 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-07-30 19:49 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-30 20:03 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-07-30 23:16 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-31 01:51 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-07-31 13:42 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-31 14:56 +0100
Re: Why does C allow structs to have a tag? Manfred <noname@add.invalid> - 2021-07-31 19:33 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-31 19:17 +0100
Re: Why does C allow structs to have a tag? Manfred <noname@add.invalid> - 2021-07-31 21:32 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-31 23:10 +0100
Re: Why does C allow structs to have a tag? Manfred <noname@add.invalid> - 2021-08-01 00:43 +0200
Re: Why does C allow structs to have a tag? Richard Damon <Richard@Damon-Family.org> - 2021-07-31 15:54 -0700
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-08-04 13:36 +0200
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-08-04 13:32 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-04 14:24 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-08-04 16:08 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-04 16:32 +0100
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-08-04 16:33 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-04 18:40 +0100
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-04 19:31 +0100
Re: Why does C allow structs to have a tag? DFS <nospam@dfs.com> - 2021-08-07 10:03 -0400
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-07 17:11 +0100
Re: Why does C allow structs to have a tag? DFS <nospam@dfs.com> - 2021-08-08 08:51 -0400
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-08 15:41 +0100
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-08-08 17:12 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-08 20:25 +0100
Re: Why does C allow structs to have a tag? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-08-08 20:21 +0100
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-08 20:38 +0100
Re: Why does C allow structs to have a tag? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-08-08 14:00 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-08 22:16 +0100
Re: Why does C allow structs to have a tag? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-08-08 22:17 +0100
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-08 22:32 +0100
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-08 23:13 +0100
Re: Why does C allow structs to have a tag? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-08-09 01:46 +0100
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-09 10:54 +0100
Re: Why does C allow structs to have a tag? Michael S <already5chosen@yahoo.com> - 2021-08-09 03:59 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-09 13:55 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-08-09 16:08 +0200
Re: Why does C allow structs to have a tag? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-08-09 07:53 -0700
Re: Why does C allow structs to have a tag? Michael S <already5chosen@yahoo.com> - 2021-08-09 08:28 -0700
Re: Why does C allow structs to have a tag? Michael S <already5chosen@yahoo.com> - 2021-08-09 08:19 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-09 16:51 +0100
Re: Why does C allow structs to have a tag? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-08-09 16:47 +0100
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-09 17:09 +0100
Re: Why does C allow structs to have a tag? Michael S <already5chosen@yahoo.com> - 2021-08-08 15:30 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-09 00:33 +0100
Re: Why does C allow structs to have a tag? DFS <nospam@dfs.com> - 2021-08-08 20:03 -0400
Re: Why does C allow structs to have a tag? Michael S <already5chosen@yahoo.com> - 2021-08-09 01:29 -0700
Re: Why does C allow structs to have a tag? DFS <nospam@dfs.com> - 2021-08-09 15:05 -0400
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-09 23:48 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-08-09 16:45 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-10 01:33 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-08-09 17:52 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-10 11:17 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-08-10 11:22 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-10 20:05 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-08-10 13:49 -0700
Re: Why does C allow structs to have a tag? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-08-10 03:03 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-10 16:27 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-08-10 11:17 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-10 20:23 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-08-10 14:00 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-10 22:54 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-08-10 15:32 -0700
Re: Why does C allow structs to have a tag? Andrey Tarasevich <andreytarasevich@hotmail.com> - 2021-08-09 17:53 -0700
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-08-09 18:27 -0700
Re: Why does C allow structs to have a tag? Michael S <already5chosen@yahoo.com> - 2021-08-10 01:55 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-10 12:19 +0100
Re: Why does C allow structs to have a tag? Michael S <already5chosen@yahoo.com> - 2021-08-10 02:04 -0700
Re: Why does C allow structs to have a tag? Michael S <already5chosen@yahoo.com> - 2021-08-10 09:42 -0700
Re: Why does C allow structs to have a tag? antispam@math.uni.wroc.pl - 2021-08-11 17:19 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-11 20:04 +0100
Re: Why does C allow structs to have a tag? antispam@math.uni.wroc.pl - 2021-08-11 20:19 +0000
Re: Why does C allow structs to have a tag? DFS <nospam@dfs.com> - 2021-08-11 16:51 -0400
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-08-11 21:33 +0000
Re: Why does C allow structs to have a tag? DFS <nospam@dfs.com> - 2021-08-11 19:10 -0400
Re: Why does C allow structs to have a tag? antispam@math.uni.wroc.pl - 2021-08-12 16:08 +0000
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-08-08 19:56 +0000
Re: Why does C allow structs to have a tag? DFS <nospam@dfs.com> - 2021-08-10 14:35 -0700
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-08-10 21:41 +0000
Re: Why does C allow structs to have a tag? DFS <nospam@dfs.com> - 2021-08-10 15:08 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-10 23:22 +0100
Re: Why does C allow structs to have a tag? DFS <nospam@dfs.com> - 2021-08-10 20:15 -0400
Re: Why does C allow structs to have a tag? antispam@math.uni.wroc.pl - 2021-08-11 08:34 +0000
Re: Why does C allow structs to have a tag? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-08-11 11:23 +0100
Re: Why does C allow structs to have a tag? Michael S <already5chosen@yahoo.com> - 2021-08-11 03:46 -0700
Re: Why does C allow structs to have a tag? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-08-11 14:29 +0100
Re: Why does C allow structs to have a tag? Michael S <already5chosen@yahoo.com> - 2021-08-11 07:26 -0700
Re: Why does C allow structs to have a tag? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2021-10-01 15:04 -0700
Re: Why does C allow structs to have a tag? Michael S <already5chosen@yahoo.com> - 2021-08-11 03:55 -0700
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-08-11 13:55 +0000
Re: Why does C allow structs to have a tag? Michael S <already5chosen@yahoo.com> - 2021-08-11 07:07 -0700
Re: Why does C allow structs to have a tag? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2021-10-01 13:44 -0700
Re: Why does C allow structs to have a tag? Andrey Tarasevich <andreytarasevich@hotmail.com> - 2021-10-01 22:40 -0700
Re: Why does C allow structs to have a tag? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2021-10-02 01:37 -0700
Re: Why does C allow structs to have a tag? DFS <nospam@dfs.com> - 2021-08-11 14:29 -0400
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-08-11 18:54 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-11 20:10 +0100
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-08-11 20:04 +0000
Re: Why does C allow structs to have a tag? DFS <nospam@dfs.com> - 2021-08-11 17:04 -0400
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-11 11:09 +0100
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-08-11 13:52 +0000
Re: Why does C allow structs to have a tag? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-08-11 08:01 -0700
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-08-11 15:06 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-11 16:47 +0100
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-08-11 16:14 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-11 18:27 +0100
Re: Why does C allow structs to have a tag? Andrey Tarasevich <andreytarasevich@hotmail.com> - 2021-08-11 11:01 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-11 19:45 +0100
Re: Why does C allow structs to have a tag? DFS <nospam@dfs.com> - 2021-08-11 15:55 -0400
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-11 22:10 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-08-11 22:47 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-11 23:00 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-08-12 10:29 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-12 12:10 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-08-12 16:28 +0200
Re: Why does C allow structs to have a tag? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-08-12 08:03 -0700
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-08-12 15:52 +0000
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-08-12 17:55 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-12 16:59 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-08-12 19:44 +0200
Re: Why does C allow structs to have a tag? antispam@math.uni.wroc.pl - 2021-08-12 19:02 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-12 20:22 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-08-12 11:10 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-12 23:17 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-08-12 16:52 -0700
Re: Why does C allow structs to have a tag? Richard Damon <Richard@Damon-Family.org> - 2021-08-12 22:22 -0400
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-08-12 19:51 -0700
Re: Why does C allow structs to have a tag? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2021-10-01 13:49 -0700
Re: Why does C allow structs to have a tag? antispam@math.uni.wroc.pl - 2021-08-12 16:52 +0000
Re: Why does C allow structs to have a tag? antispam@math.uni.wroc.pl - 2021-08-12 18:45 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-12 22:17 +0100
Re: Why does C allow structs to have a tag? antispam@math.uni.wroc.pl - 2021-08-11 21:09 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-11 23:13 +0100
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-11 23:30 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-08-12 10:39 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-12 12:26 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-08-12 16:44 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-12 17:20 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-08-12 20:00 +0200
Re: Why does C allow structs to have a tag? antispam@math.uni.wroc.pl - 2021-08-12 00:44 +0000
Re: Why does C allow structs to have a tag? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-08-11 10:39 -0700
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-08-11 17:52 +0000
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-08-11 11:41 -0700
Re: Why does C allow structs to have a tag? DFS <nospam@dfs.com> - 2021-08-08 16:00 -0400
Re: Why does C allow structs to have a tag? Ike Naar <ike@rie.sdf.org> - 2021-08-09 05:46 +0000
Re: Why does C allow structs to have a tag? Michael S <already5chosen@yahoo.com> - 2021-08-09 01:38 -0700
Re: Why does C allow structs to have a tag? Michael S <already5chosen@yahoo.com> - 2021-08-09 01:57 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-09 10:55 +0100
Re: Why does C allow structs to have a tag? James Kuyper <jameskuyper@alumni.caltech.edu> - 2021-08-04 11:48 -0400
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-08-04 19:34 +0200
Re: Why does C allow structs to have a tag? antispam@math.uni.wroc.pl - 2021-07-31 19:18 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-31 22:35 +0100
Re: Why does C allow structs to have a tag? antispam@math.uni.wroc.pl - 2021-07-31 23:51 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-01 01:46 +0100
Re: Why does C allow structs to have a tag? Manfred <noname@add.invalid> - 2021-07-30 17:20 +0200
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-30 11:16 -0700
Re: Why does C allow structs to have a tag? Manfred <noname@add.invalid> - 2021-07-30 20:24 +0200
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-30 14:17 -0700
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-07-30 14:55 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-30 16:13 +0100
Re: Why does C allow structs to have a tag? "james...@alumni.caltech.edu" <jameskuyper@alumni.caltech.edu> - 2021-07-30 09:08 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-30 18:18 +0100
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-07-30 17:38 +0000
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-30 11:17 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-30 20:33 +0100
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-07-30 20:10 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-30 21:50 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-30 14:49 -0700
Re: Why does C allow structs to have a tag? "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2021-07-30 14:39 -0700
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-30 14:44 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-31 00:08 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-30 16:31 -0700
Re: Why does C allow structs to have a tag? antispam@math.uni.wroc.pl - 2021-07-31 19:57 +0000
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-30 11:01 -0700
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-07-30 23:28 +0200
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-30 15:19 -0700
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-30 11:12 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-30 20:26 +0100
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-07-30 20:08 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-30 22:10 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-30 15:34 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-31 00:13 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-30 16:36 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-31 02:23 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-30 21:14 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-31 11:27 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-31 15:29 -0700
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-31 15:48 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-01 00:14 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-31 16:25 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-01 00:52 +0100
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-01 00:29 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-31 16:50 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-01 01:16 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-31 18:01 -0700
Re: Why does C allow structs to have a tag? gazelle@shell.xmission.com (Kenny McCormack) - 2021-08-01 01:38 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-01 11:41 +0100
Re: Why does C allow structs to have a tag? gazelle@shell.xmission.com (Kenny McCormack) - 2021-08-01 19:14 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-01 11:54 +0100
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-08-01 16:34 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-08-01 14:58 -0700
Re: Why does C allow structs to have a tag? Manfred <noname@invalid.add> - 2021-08-01 19:27 +0200
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-30 14:43 -0700
Re: Why does C allow structs to have a tag? antispam@math.uni.wroc.pl - 2021-07-30 23:33 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-31 02:11 +0100
Re: Why does C allow structs to have a tag? antispam@math.uni.wroc.pl - 2021-07-31 20:33 +0000
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-07-31 02:14 +0000
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-30 21:23 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-31 11:39 +0100
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-31 12:58 -0700
Re: Why does C allow structs to have a tag? Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2021-07-31 21:21 +0000
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-07-30 14:54 +0000
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-30 10:47 -0700
Re: Why does C allow structs to have a tag? "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2021-07-30 14:16 -0700
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-07-30 14:51 +0000
Re: Why does C allow structs to have a tag? Manfred <noname@add.invalid> - 2021-07-30 20:22 +0200
Re: Why does C allow structs to have a tag? "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2021-07-30 14:07 -0700
Re: Why does C allow structs to have a tag? John Dill <jadill33@gmail.com> - 2021-07-29 06:09 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-29 14:26 +0100
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-07-29 13:51 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-07-29 16:18 +0100
Re: Why does C allow structs to have a tag? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2021-09-30 05:39 -0700
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-27 17:14 -0700
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-07-28 02:01 +0000
Re: Why does C allow structs to have a tag? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-27 19:07 -0700
Re: Why does C allow structs to have a tag? "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2021-07-27 12:32 -0700
Re: Why does C allow structs to have a tag? "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2021-07-27 12:41 -0700
Re: Why does C allow structs to have a tag? John Bode <jfbode1029@gmail.com> - 2021-07-30 09:02 -0500
Re: Why does C allow structs to have a tag? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-07-30 15:19 +0100
Re: Why does C allow structs to have a tag? John Bode <jfbode1029@gmail.com> - 2021-07-30 10:19 -0500
Re: Why does C allow structs to have a tag? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-07-30 16:34 +0100
Re: Why does C allow structs to have a tag? scott@slp53.sl.home (Scott Lurndal) - 2021-07-30 15:58 +0000
Re: Why does C allow structs to have a tag? Lowell Gilbert <lgusenet@be-well.ilk.org> - 2021-07-30 11:28 -0400
Re: Why does C allow structs to have a tag? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2021-09-06 05:20 -0700
Re: Why does C allow structs to have a tag? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2021-09-06 05:09 -0700
Re: Why does C allow structs to have a tag? Siri Cruise <chine.bleu@yahoo.com> - 2021-06-11 12:33 -0700
Re: Why does C allow structs to have a tag? Andrey Tarasevich <andreytarasevich@hotmail.com> - 2021-06-16 19:39 -0700
Re: Why does C allow structs to have a tag? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-06-17 11:50 +0100
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-17 12:02 +0100
Re: Why does C allow structs to have a tag? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-06-17 17:05 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-06-17 13:49 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-17 13:39 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-06-17 15:05 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-17 14:34 +0100
Re: Why does C allow structs to have a tag? David Brown <david.brown@hesbynett.no> - 2021-06-17 18:35 +0200
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-17 18:14 +0100
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-17 11:29 +0100
Re: Why does C allow structs to have a tag? Andrey Tarasevich <andreytarasevich@hotmail.com> - 2021-06-17 08:22 -0700
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-06-17 16:22 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-17 17:57 +0100
Re: Why does C allow structs to have a tag? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-06-17 17:53 +0000
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-17 21:27 +0100
Re: Why does C allow structs to have a tag? Öö Tiib <ootiib@hot.ee> - 2021-06-17 17:58 -0700
Re: Why does C allow structs to have a tag? Bart <bc@freeuk.com> - 2021-06-18 11:25 +0100
Re: Why does C allow structs to have a tag? Guillaume <message@bottle.org> - 2021-06-17 19:30 +0200
Page 12 of 20 — ← Prev page 1 … 10 11 [12] 13 14 … 20 Next page →
| From | Michael S <already5chosen@yahoo.com> |
|---|---|
| Date | 2021-08-11 03:46 -0700 |
| Message-ID | <63773d19-8176-43a0-9c6d-47f72b1e1c10n@googlegroups.com> |
| In reply to | #162308 |
On Wednesday, August 11, 2021 at 1:23:55 PM UTC+3, Ben Bacarisse wrote:
> anti...@math.uni.wroc.pl writes:
>
> > DFS <nos...@dfs.com> wrote:
> <cut>
> >> =================================================================
> >>
> >> //option 1: one puts per line (suggested by bart)
> >> int i = 0;
> >> char buff[longword+3];
> >> char line[tcols];
> >> *line = '\0';
> >> while(i < matchcnt) {
> >> for(int j = 1;j<=maxcols;j++) {
> >> sprintf(buff,"%-*s ",longword,matchwords[i++]);
> >> strcat(line,buff);
> >> }
> >> puts(line);
> >> *buff = '\0';
> >> *line = '\0';
> >> }
> >>
> >> =================================================================
> >>
> >> //option 2: one big string, one puts (per Lurndal)
> >> static char line[10000000]; //declared outside the func
> >>
> >> int i = 0;
> >> char buff[longword+3];
> >> *line = '\0';
> >> while(i < matchcnt) {
> >> for(int j = 1;j<=maxcols;j++) {
> >> sprintf(buff,"%-*s ",longword,matchwords[i++]);
> >> strcat(line,buff);
> > ^^^^^^^^^^^^^^^^^^
> >> }
> >> *buff = '\0';
> >> strcat(line,"\n");
> >> }
> >> puts(line);
> >>
> >> =================================================================
> >
> > The 'strcat' in a loop is classic antipattern: it causes quadratic
> > complexity to to repeated scanning for end of 'line'. Use something
> > like
> >
> > char * cp = line;
> > .....
> > strcat(cp, buff);
> > cp += strlen(buff);
> > ....
> ... or get the length first and use memcpy. But my favourite is
>
> cp += snprintf(cp, "%s", whatever);
>
> --
> Ben.
Don't you mean sprintf() ?
snprintf() requires one more parameter (size of the target buffer) and does *not* return the number of actually written characters when buffer is too small.
[toc] | [prev] | [next] | [standalone]
| From | Ben Bacarisse <ben.usenet@bsb.me.uk> |
|---|---|
| Date | 2021-08-11 14:29 +0100 |
| Message-ID | <87tujwgldp.fsf@bsb.me.uk> |
| In reply to | #162309 |
Michael S <already5chosen@yahoo.com> writes:
> On Wednesday, August 11, 2021 at 1:23:55 PM UTC+3, Ben Bacarisse wrote:
>> anti...@math.uni.wroc.pl writes:
>>
>> > DFS <nos...@dfs.com> wrote:
>> <cut>
>> >> =================================================================
>> >>
>> >> //option 1: one puts per line (suggested by bart)
>> >> int i = 0;
>> >> char buff[longword+3];
>> >> char line[tcols];
>> >> *line = '\0';
>> >> while(i < matchcnt) {
>> >> for(int j = 1;j<=maxcols;j++) {
>> >> sprintf(buff,"%-*s ",longword,matchwords[i++]);
>> >> strcat(line,buff);
>> >> }
>> >> puts(line);
>> >> *buff = '\0';
>> >> *line = '\0';
>> >> }
>> >>
>> >> =================================================================
>> >>
>> >> //option 2: one big string, one puts (per Lurndal)
>> >> static char line[10000000]; //declared outside the func
>> >>
>> >> int i = 0;
>> >> char buff[longword+3];
>> >> *line = '\0';
>> >> while(i < matchcnt) {
>> >> for(int j = 1;j<=maxcols;j++) {
>> >> sprintf(buff,"%-*s ",longword,matchwords[i++]);
>> >> strcat(line,buff);
>> > ^^^^^^^^^^^^^^^^^^
>> >> }
>> >> *buff = '\0';
>> >> strcat(line,"\n");
>> >> }
>> >> puts(line);
>> >>
>> >> =================================================================
>> >
>> > The 'strcat' in a loop is classic antipattern: it causes quadratic
>> > complexity to to repeated scanning for end of 'line'. Use something
>> > like
>> >
>> > char * cp = line;
>> > .....
>> > strcat(cp, buff);
>> > cp += strlen(buff);
>> > ....
>> ... or get the length first and use memcpy. But my favourite is
>>
>> cp += snprintf(cp, "%s", whatever);
>>
>> --
>> Ben.
>
> Don't you mean sprintf() ?
Yes, thanks. Finger memory making me type letters.
> snprintf() requires one more parameter (size of the target buffer) and
> does *not* return the number of actually written characters when
> buffer is too small.
snprintf is, in fact, what one usually wants to avoid making assumptions
about available space (hence my urge to type it!) but the pattern
becomes more complex in portable code because you can't write this:
while (cp < ep) cp += snprintf(cp, ep - cp, "%s", whatever);
because the construction of the pointer (and the subsequent comparison)
are undefined. Once the pattern gets more complicated, other options
start to look simpler.
--
Ben.
[toc] | [prev] | [next] | [standalone]
| From | Michael S <already5chosen@yahoo.com> |
|---|---|
| Date | 2021-08-11 07:26 -0700 |
| Message-ID | <abc90066-026b-489d-9792-596e584c0af1n@googlegroups.com> |
| In reply to | #162311 |
On Wednesday, August 11, 2021 at 4:29:52 PM UTC+3, Ben Bacarisse wrote:
> Michael S <already...@yahoo.com> writes:
>
> > On Wednesday, August 11, 2021 at 1:23:55 PM UTC+3, Ben Bacarisse wrote:
> >> anti...@math.uni.wroc.pl writes:
> >>
> >> > DFS <nos...@dfs.com> wrote:
> >> <cut>
> >> >> =================================================================
> >> >>
> >> >> //option 1: one puts per line (suggested by bart)
> >> >> int i = 0;
> >> >> char buff[longword+3];
> >> >> char line[tcols];
> >> >> *line = '\0';
> >> >> while(i < matchcnt) {
> >> >> for(int j = 1;j<=maxcols;j++) {
> >> >> sprintf(buff,"%-*s ",longword,matchwords[i++]);
> >> >> strcat(line,buff);
> >> >> }
> >> >> puts(line);
> >> >> *buff = '\0';
> >> >> *line = '\0';
> >> >> }
> >> >>
> >> >> =================================================================
> >> >>
> >> >> //option 2: one big string, one puts (per Lurndal)
> >> >> static char line[10000000]; //declared outside the func
> >> >>
> >> >> int i = 0;
> >> >> char buff[longword+3];
> >> >> *line = '\0';
> >> >> while(i < matchcnt) {
> >> >> for(int j = 1;j<=maxcols;j++) {
> >> >> sprintf(buff,"%-*s ",longword,matchwords[i++]);
> >> >> strcat(line,buff);
> >> > ^^^^^^^^^^^^^^^^^^
> >> >> }
> >> >> *buff = '\0';
> >> >> strcat(line,"\n");
> >> >> }
> >> >> puts(line);
> >> >>
> >> >> =================================================================
> >> >
> >> > The 'strcat' in a loop is classic antipattern: it causes quadratic
> >> > complexity to to repeated scanning for end of 'line'. Use something
> >> > like
> >> >
> >> > char * cp = line;
> >> > .....
> >> > strcat(cp, buff);
> >> > cp += strlen(buff);
> >> > ....
> >> ... or get the length first and use memcpy. But my favourite is
> >>
> >> cp += snprintf(cp, "%s", whatever);
> >>
> >> --
> >> Ben.
> >
> > Don't you mean sprintf() ?
> Yes, thanks. Finger memory making me type letters.
> > snprintf() requires one more parameter (size of the target buffer) and
> > does *not* return the number of actually written characters when
> > buffer is too small.
> snprintf is, in fact, what one usually wants to avoid making assumptions
> about available space (hence my urge to type it!) but the pattern
> becomes more complex in portable code because you can't write this:
>
> while (cp < ep) cp += snprintf(cp, ep - cp, "%s", whatever);
>
> because the construction of the pointer (and the subsequent comparison)
> are undefined. Once the pattern gets more complicated, other options
> start to look simpler.
>
> --
> Ben.
The code below is what I have in majority of my embedded projects.
May be, not 100% portable, by I don't care even about 25% portability. If it works on 1-2-3-4 targets that I care about, I am satisfied.
The purpose of my_pritntf() is to prevent buffer overflows (when used in code patterns similar to one you illustrated above) rather than to always output something meaningful.
For systems in question, it tends to be used in "nice to have" parts like telnet and web interfaces that are mostly used during development. For core functionality I try to impose anti-Doug-McIlroy principles, i.e. avoid both text inputs and text outputs. Not 100% successfully, last years one client in one small project insisted on JASON-based main COMM protocol, but that's a rare exception.
#include <stdio.h>
#include <limits.h>
#include <stdarg.h>
#include "my_snprintf.h"
// my_snprintf - Write formatted output to sized buffer
// my_snprintf is similar to snprintf() with following modifications
// 1. Argument n is signed. For n <= 0 the function does nothing and returns 0
// 2. Return value is always a number of characters that have been into s,
// not counting the terminating null character.
// The rest of description applies to case of positive n.
// Unlike snprintf(), if an encoding error occurs, a 0 is returned and
// the terminating null character is written to s[0].
// Unlike snprintf(), if n had not been sufficiently large, a value of n-1
// is returned and the terminating null character is written to s[n-1].
int
my_snprintf(char * s, ptrdiff_t n, const char * format, ...)
{
if (n <= 0)
return 0;
if (n > INT_MAX)
n = INT_MAX;
va_list args;
va_start(args, format);
int ret = vsnprintf(s, n, format, args);
if (ret < 0)
{ // encoding error.
// since our code uses no UNICODE, it should never happen, but let's handle it nevertheless
s[0] = 0; // may be, unnecessary
return 0;
}
if (ret >= n) {
s[n-1] = 0; // most likely unnecessary
return n-1;
}
return ret;
}
[toc] | [prev] | [next] | [standalone]
| From | Tim Rentsch <tr.17687@z991.linuxsc.com> |
|---|---|
| Date | 2021-10-01 15:04 -0700 |
| Message-ID | <8635pktn9i.fsf@linuxsc.com> |
| In reply to | #162316 |
Michael S <already5chosen@yahoo.com> writes:
[...]
> The purpose of my_pritntf() is to prevent buffer overflows [...]
> rather than to always output something meaningful. [...]
Sounds useful and practical.
> [..some whitespace added in what follows..]
>
> #include <stdio.h>
> #include <limits.h>
> #include <stdarg.h>
>
> #include "my_snprintf.h"
>
> // my_snprintf - Write formatted output to sized buffer
> // my_snprintf is similar to snprintf() with following modifications
> //
> // 1. Argument n is signed. For n <= 0 the function does nothing
> // and returns 0
> //
> // 2. Return value is always a number of characters that have been
> // into s, not counting the terminating null character.
> //
> // The rest of description applies to case of positive n.
> // Unlike snprintf(), if an encoding error occurs, a 0 is returned
> // and the terminating null character is written to s[0].
> // Unlike snprintf(), if n had not been sufficiently large, a
> // value of n-1 is returned and the terminating null character is
> // written to s[n-1].
>
> int
> my_snprintf(char * s, ptrdiff_t n, const char * format, ...)
> {
> if (n <= 0)
> return 0;
> if (n > INT_MAX)
> n = INT_MAX;
>
> va_list args;
> va_start(args, format);
> int ret = vsnprintf(s, n, format, args);
> if (ret < 0)
> { // encoding error.
> // since our code uses no UNICODE, it should never happen,
> // but let's handle it nevertheless
> s[0] = 0; // may be, unnecessary
> return 0;
> }
>
> if (ret >= n) {
> s[n-1] = 0; // most likely unnecessary
> return n-1;
> }
>
> return ret;
> }
Some short comments:
One: signed types have issues. Rather than using a signed type
for the parameter 'n', use a large unsigned type such as unsigned
long long. Doing that still allows arguments having a signed
type to be checked for negative values, following the rules for
conversion of a signed value to an unsigned type.
Two: va_start() always requires a corresponding va_end().
Three: when supplying a *printf() function, it is customary to
supply also a corresponding *vprintf() function, which makes
writing the non-v form straightforward. It's two functions for
the price of one (plus only a little bit). Also it makes the
habit of using va_end() along with va_start() fall out with
essentially no effort.
To illustrate these points in C code, here is a revised writing
of my_snprintf(), along with my_vsnprintf();
// --- cut here ---
#include <limits.h>
#include <stdio.h>
#include <stdarg.h>
typedef unsigned long long ULL;
extern int my_vsnprintf( char *, ULL, const char *, va_list );
int
my_snprintf( char * s, ULL n, const char * format, ... ){
va_list args;
int r;
va_start( args, format );
r = my_vsnprintf( s, n, format, args );
va_end( args );
return r;
}
int
my_vsnprintf( char * s, ULL n0, const char * format, va_list args ){
if( n0 > -1ULL>>1 || n0 == 0 ) return 0;
size_t n = n0 > INT_MAX ? INT_MAX : n0;
int ret = vsnprintf( s, n, format, args );
return
ret < 0 ? s[0] = 0, 0 :
ret >= n ? s[n-1] = 0, n-1 :
ret;
}
[toc] | [prev] | [next] | [standalone]
| From | Michael S <already5chosen@yahoo.com> |
|---|---|
| Date | 2021-08-11 03:55 -0700 |
| Message-ID | <2c0cb99f-2d5f-4149-8b03-d96ecc3d6543n@googlegroups.com> |
| In reply to | #162306 |
On Wednesday, August 11, 2021 at 11:34:16 AM UTC+3, anti...@math.uni.wroc.pl wrote:
> DFS <nos...@dfs.com> wrote:
> >
> > Thanks. I created a static array[10_000_000] outside the function, and
> > it handled large results sets just fine. But another issue popped up,
> > using option 2, which concatenates words one by one into that static
> > array, then does one puts() at the end.
> >
> > Turns out it's VERY slow for large result sets.
> >
> > Option 1 Option 2
> > substring catt: 91 matches found 0.04s 0.038s
> > substring cat : 3710 matches found 0.20s 0.16s
> > substring ca : 22793 matches found 1.39s 2.25s
> > substring c : 128689 matches found 7.75s 57.91s
> > substring e : 252896 matches found 15.29s 216.58s
> >
> > Option 1 starts printing immediately, one line at a time. Option 2 sits
> > there constructing that long string for quite a while. Too long I
> > think. What might I be doing wrong?
> >
> > Note: the timing includes time to print to screen. Just finding the
> > word matches is 0.03s using either option.
> >
> >
> > =================================================================
> >
> > //option 1: one puts per line (suggested by bart)
> > int i = 0;
> > char buff[longword+3];
> > char line[tcols];
> > *line = '\0';
> > while(i < matchcnt) {
> > for(int j = 1;j<=maxcols;j++) {
> > sprintf(buff,"%-*s ",longword,matchwords[i++]);
> > strcat(line,buff);
> > }
> > puts(line);
> > *buff = '\0';
> > *line = '\0';
> > }
> >
> > =================================================================
> >
> > //option 2: one big string, one puts (per Lurndal)
> > static char line[10000000]; //declared outside the func
> >
> > int i = 0;
> > char buff[longword+3];
> > *line = '\0';
> > while(i < matchcnt) {
> > for(int j = 1;j<=maxcols;j++) {
> > sprintf(buff,"%-*s ",longword,matchwords[i++]);
> > strcat(line,buff);
> ^^^^^^^^^^^^^^^^^^
> > }
> > *buff = '\0';
> > strcat(line,"\n");
> > }
> > puts(line);
> >
> > =================================================================
> The 'strcat' in a loop is classic antipattern: it causes quadratic
> complexity to to repeated scanning for end of 'line'. Use something
> like
>
> char * cp = line;
> .....
> strcat(cp, buff);
> cp += strlen(buff);
> ....
>
>
> --
> Waldek Hebisch
strcat() should have been deprecated in 1989 with replacement that returns something potentially useful, e.g. pointer to
termination character of result string or length of result string. Or return nothing, which still would be an improvement.
But committees have their own logic.
[toc] | [prev] | [next] | [standalone]
| From | scott@slp53.sl.home (Scott Lurndal) |
|---|---|
| Date | 2021-08-11 13:55 +0000 |
| Message-ID | <kFQQI.17255$lK.6119@fx41.iad> |
| In reply to | #162310 |
Michael S <already5chosen@yahoo.com> writes: >On Wednesday, August 11, 2021 at 11:34:16 AM UTC+3, anti...@math.uni.wroc.pl wrote: > >strcat() should have been deprecated in 1989 with replacement that returns something potentially useful, e.g. pointer to >termination character of result string or length of result string. Or return nothing, which still would be an improvement. > >But committees have their own logic. Having been a member of those committees for a decade, I'll point out that deprecating or changing the semantics of strcat would have broken vast amounts of existing, functioning and useful code. Secondly, as pointed out in the thread, the function snprintf is a suitable substitute.
[toc] | [prev] | [next] | [standalone]
| From | Michael S <already5chosen@yahoo.com> |
|---|---|
| Date | 2021-08-11 07:07 -0700 |
| Message-ID | <1f79b2e5-0e07-488f-a529-c00f7d6e046fn@googlegroups.com> |
| In reply to | #162314 |
On Wednesday, August 11, 2021 at 4:55:41 PM UTC+3, Scott Lurndal wrote: > Michael S <already...@yahoo.com> writes: > >On Wednesday, August 11, 2021 at 11:34:16 AM UTC+3, anti...@math.uni.wroc.pl wrote: > > > > >strcat() should have been deprecated in 1989 with replacement that returns something potentially useful, e.g. pointer to > >termination character of result string or length of result string. Or return nothing, which still would be an improvement. > > > >But committees have their own logic. > Having been a member of those committees for a decade, > I'll point out that deprecating or changing the semantics of strcat For me, deprecation does not mean *immediate* removal. For me, it mean that we threaten to remove a function in 15 years time and are actually removing it after 30 years. Or never. But in the mean time conforming compilers issue annoying diagnostics. And, of course, nobody suggest changing semantic without changing name. > would have broken vast amounts of existing, functioning > and useful code. > > Secondly, as pointed out in the thread, the function snprintf > is a suitable substitute. No, sprintf() is more like strcpy(). And snprintf() differs even more.
[toc] | [prev] | [next] | [standalone]
| From | Tim Rentsch <tr.17687@z991.linuxsc.com> |
|---|---|
| Date | 2021-10-01 13:44 -0700 |
| Message-ID | <86czootqz0.fsf@linuxsc.com> |
| In reply to | #162315 |
Michael S <already5chosen@yahoo.com> writes: > On Wednesday, August 11, 2021 at 4:55:41 PM UTC+3, Scott Lurndal wrote: > >> Michael S <already...@yahoo.com> writes: >> >>> On Wednesday, August 11, 2021 at 11:34:16 AM UTC+3, >>> anti...@math.uni.wroc.pl wrote: >>> [...] >>> strcat() should have been deprecated in 1989 with replacement that >>> returns something potentially useful, e.g. pointer to >>> termination character of result string or length of result string. >>> Or return nothing, which still would be an improvement. >>> >>> But committees have their own logic. >> >> Having been a member of those committees for a decade, I'll point >> out that deprecating or changing the semantics of strcat > > For me, deprecation does not mean *immediate* removal. For me, it > mean that we threaten to remove a function in 15 years time and > are actually removing it after 30 years. Or never. The ISO C standard normally uses the term "obsolescent" to indicate a language or library feature that may be removed at some indeterminate point in the future. If ever, and not necessarily - some language or library features have been termed "obsolescent" in earlier versions of the C standard but restored to non-obsolescent status in later versions. The ISO C standard normally uses the term "deprecated" to indicate a language or library feature that is expected to be removed in some subsequent version of the C standard. There is a good chance that removal happens soon (e.g., in the next release) but there is no guarantee of that. > But in the mean time conforming compilers issue annoying > diagnostics. The ISO C standard does not require diagnostics either for obsolescent features or deprecated features. I think it's common for implemenations to issue diagnostics for deprecated features but that is completely up to the implementation. And of course an implementation is free to issue diagnostics for anything it wants to, as long as it accepts all strictly conforming programs (and using obsolescent or deprecated features doesn't violate that condition, IIANM).
[toc] | [prev] | [next] | [standalone]
| From | Andrey Tarasevich <andreytarasevich@hotmail.com> |
|---|---|
| Date | 2021-10-01 22:40 -0700 |
| Message-ID | <sj8rcj$c8h$1@dont-email.me> |
| In reply to | #162916 |
On 10/1/2021 1:44 PM, Tim Rentsch wrote: > > The ISO C standard normally uses the term "obsolescent" to > indicate a language or library feature that may be removed at > ... > The ISO C standard normally uses the term "deprecated" to > indicate a language or library feature that is expected to be > ... Um... The ISO C standard uses the term "obsolescent" to refer to features marked for future removal. ISO C standard does designate the word "deprecated" as a standard term. One can encounter the word "deprecated" in the standard text, but it is never used to refer to language features. "Deprecated" is used by C++ standard. "Deprecated" in C++ is an exact synonym of "obsolescent" in C. -- Best regards, Andrey Tarasevich
[toc] | [prev] | [next] | [standalone]
| From | Tim Rentsch <tr.17687@z991.linuxsc.com> |
|---|---|
| Date | 2021-10-02 01:37 -0700 |
| Message-ID | <86tuhzstyl.fsf@linuxsc.com> |
| In reply to | #162930 |
Andrey Tarasevich <andreytarasevich@hotmail.com> writes:
> On 10/1/2021 1:44 PM, Tim Rentsch wrote:
>
>> The ISO C standard normally uses the term "obsolescent" to
>> indicate a language or library feature that may be removed at
>> ...
>> The ISO C standard normally uses the term "deprecated" to
>> indicate a language or library feature that is expected to be
>> ...
>
> Um...
>
> The ISO C standard uses the term "obsolescent" to refer to
> features marked for future removal.
No, it doesn't. ISO C standard, Introduction, paragraph 2:
Certain features are /obsolescent/, which means that they may
be considered for withdrawal in future revisions of this
International Standard.
Note the phrase "may be considered". (The slant characters around
the word obsolescent indicate italics, meaning a definition.) Such
features may be /considered/ for removal, but they are not /marked/
for removal.
> ISO C standard does designate the word "deprecated" as a standard
> term.
None of the several versions of the ISO C standard that I looked
at give a definition for "deprecate" or "deprecated". All use
the word, but none of them define it.
> One can encounter the word "deprecated" in the standard text, but
> it is never used to refer to language features.
Certainly it is is. For example N1256, which is C99 plus three
technical corrigenda, says this in 7.26.9 paragraph 2:
The gets function is obsolescent, and is deprecated.
> "Deprecated" is used by C++ standard. "Deprecated" in C++ is an
> exact synonym of "obsolescent" in C.
No, it isn't. A feature being obsolescent in C means only that
it "may be considered" at a later time, whereas a feature being
deprecated in C++ means that it "[has] been identified" as being
subject to removal in a later standard. The word obsolescent is
tentative, the word deprecated more definite. The two terms may
be related but they are not the same.
[toc] | [prev] | [next] | [standalone]
| From | DFS <nospam@dfs.com> |
|---|---|
| Date | 2021-08-11 14:29 -0400 |
| Message-ID | <9GUQI.8728$Bg6.71@fx42.iad> |
| In reply to | #162306 |
On 8/11/2021 4:34 AM, antispam@math.uni.wroc.pl wrote:
> The 'strcat' in a loop is classic antipattern: it causes quadratic
> complexity to to repeated scanning for end of 'line'. Use something
> like
>
> char * cp = line;
> .....
> strcat(cp, buff);
> cp += strlen(buff);
> ....
>
From other posts:
> Bacarisse: "my favourite is cp += snprintf(cp, "%s", whatever);"
> (he meant to say sprintf)
> Lurndal: "Building it with snprintf() will be far more flexible and
> efficient."
build string, in seconds
----------------------------- build +
antispam sprintf()/ print to
substring matches strcat as above snprintf() screen
catt 91 0.036 0.036 0.036 0.037
cat 3710 0.067 0.038 0.038 0.129
ca 22793 1.423 0.044 0.052 0.657
c 128689 53.591 0.084 0.139 4.437
e 252896 207.782 0.132 0.238 8.598
Much better! Thanks for the suggestions.
built on Win10, using Mingw-w64 GCC
http://mingw-w64.org/doku.php
which I got via
https://github.com/skeeto/w64devkit/releases/tag/v1.8.0
run in cmd.exe shell inside ConEmu
$ prog wordlist.txt option1234 (for dev and testing)
===========================================================================
//print matching words in columns of the same size, with no line
// wrapping in middle of word
//array large enough to output 370K words of length 31
static char line[12000000];
void showresults(char *matchwords[], int matchcnt, int stropt) {
//get longest word in results
int longword = 0;
for(int i=0;i<matchcnt;i++) {
int thislen = strlen(matchwords[i]);
if(thislen>longword) {longword=thislen; }
}
//get # of columns visible onscreen
int tcols = gettcols();
//get max number of columns to print on each line
//add 2 to longword to account for spaces
int maxcols = ((int)(tcols/(longword+2)));
//build one big string, do one puts
//fastest but requires huge array alloc
int i = 0;
char buff[longword+3];
*line = '\0';
char *cp = line;
while(i < matchcnt) {
for(int j = 1;j<=maxcols;j++) {
//add word to buffer
sprintf(buff,"%-*s ",longword,matchwords[i++]);
//add buffer to string
//strcat
if(stropt == 1) {
strcat(line,buff);
}
//antispam/strlen
else if(stropt == 2) {
strcat(cp, buff);
cp += strlen(buff);
}
//sprintf
else if(stropt == 3) {
cp += sprintf(cp, "%s", buff);
}
//snprintf
else if(stropt == 4) {
cp += snprintf(cp, sizeof buff, "%s", buff);
}
}
//reset buffer
*buff = '\0';
//add newline
if(stropt == 1) //strcat
strcat(line,"\n");
else
cp += sprintf(cp, "\n");
}
//print to screen
puts(line);
//show string builder option
char *stropts[] = {"strcat","antispam/strlen","sprintf","snprintf"};
printf("%s\n",stropts[stropt-1]);
}
===========================================================================
[toc] | [prev] | [next] | [standalone]
| From | scott@slp53.sl.home (Scott Lurndal) |
|---|---|
| Date | 2021-08-11 18:54 +0000 |
| Message-ID | <r1VQI.5573$xY.4985@fx05.iad> |
| In reply to | #162328 |
DFS <nospam@dfs.com> writes:
>On 8/11/2021 4:34 AM, antispam@math.uni.wroc.pl wrote:
>
>
>> The 'strcat' in a loop is classic antipattern: it causes quadratic
>> complexity to to repeated scanning for end of 'line'. Use something
>> like
>>
>> char * cp = line;
>> .....
>> strcat(cp, buff);
>> cp += strlen(buff);
>> ....
>>
>
> From other posts:
>
>> Bacarisse: "my favourite is cp += snprintf(cp, "%s", whatever);"
>> (he meant to say sprintf)
>
>> Lurndal: "Building it with snprintf() will be far more flexible and
>> efficient."
>
>
>
> build string, in seconds
> ----------------------------- build +
> antispam sprintf()/ print to
>substring matches strcat as above snprintf() screen
>
>catt 91 0.036 0.036 0.036 0.037
>cat 3710 0.067 0.038 0.038 0.129
>ca 22793 1.423 0.044 0.052 0.657
>c 128689 53.591 0.084 0.139 4.437
>e 252896 207.782 0.132 0.238 8.598
>
>
>Much better! Thanks for the suggestions.
>
>
>built on Win10, using Mingw-w64 GCC
>http://mingw-w64.org/doku.php
>
>which I got via
>https://github.com/skeeto/w64devkit/releases/tag/v1.8.0
>
>run in cmd.exe shell inside ConEmu
>
>$ prog wordlist.txt option1234 (for dev and testing)
>
>===========================================================================
>//print matching words in columns of the same size, with no line
>// wrapping in middle of word
>
>//array large enough to output 370K words of length 31
>static char line[12000000];
>
>void showresults(char *matchwords[], int matchcnt, int stropt) {
>
I was thinking more along the lines of this:
static char line[12000000];
/**
* Catenate the words from 'matchwords' into 'line', computing the
* word length of the longest single word along the way.
*
* @param matchwords A vector of character pointers, one for each word
* @param matchcnt The number of entries in the matchwords vector.
*/
void
showresults(char **matchwords, size_t matchcnt)
{
size_t longest_word = 0ul;
char *lp = line;
char *elp = &line[sizeof(line)];
for(size_t i = 0ul; i < matchcount; i++) {
char *cp = *matchwords++;
size_t len = 0ul;
while ((*cp != '\0') && (lp < elp)) {
len++;
*lp++ = *cp++;
}
longest_word = max(longest_word, len);
}
if (lp < elp) *lp++ = '\0';
else line[sizeof(line)-1] = '\0';
puts(line);
}
It will silently truncate the output string if 'line'
isn't large enough to collect all the words in 'matchwords'.
The implementation of max is left to the student.
[toc] | [prev] | [next] | [standalone]
| From | Bart <bc@freeuk.com> |
|---|---|
| Date | 2021-08-11 20:10 +0100 |
| Message-ID | <sf17aj$3gg$1@dont-email.me> |
| In reply to | #162331 |
On 11/08/2021 19:54, Scott Lurndal wrote:
> DFS <nospam@dfs.com> writes:
>> On 8/11/2021 4:34 AM, antispam@math.uni.wroc.pl wrote:
>>
>>
>>> The 'strcat' in a loop is classic antipattern: it causes quadratic
>>> complexity to to repeated scanning for end of 'line'. Use something
>>> like
>>>
>>> char * cp = line;
>>> .....
>>> strcat(cp, buff);
>>> cp += strlen(buff);
>>> ....
>>>
>>
>> From other posts:
>>
>>> Bacarisse: "my favourite is cp += snprintf(cp, "%s", whatever);"
>>> (he meant to say sprintf)
>>
>>> Lurndal: "Building it with snprintf() will be far more flexible and
>>> efficient."
>>
>>
>>
>> build string, in seconds
>> ----------------------------- build +
>> antispam sprintf()/ print to
>> substring matches strcat as above snprintf() screen
>>
>> catt 91 0.036 0.036 0.036 0.037
>> cat 3710 0.067 0.038 0.038 0.129
>> ca 22793 1.423 0.044 0.052 0.657
>> c 128689 53.591 0.084 0.139 4.437
>> e 252896 207.782 0.132 0.238 8.598
>>
>>
>> Much better! Thanks for the suggestions.
>>
>>
>> built on Win10, using Mingw-w64 GCC
>> http://mingw-w64.org/doku.php
>>
>> which I got via
>> https://github.com/skeeto/w64devkit/releases/tag/v1.8.0
>>
>> run in cmd.exe shell inside ConEmu
>>
>> $ prog wordlist.txt option1234 (for dev and testing)
>>
>> ===========================================================================
>> //print matching words in columns of the same size, with no line
>> // wrapping in middle of word
>>
>> //array large enough to output 370K words of length 31
>> static char line[12000000];
>>
>> void showresults(char *matchwords[], int matchcnt, int stropt) {
>>
>
> I was thinking more along the lines of this:
>
> static char line[12000000];
>
> /**
> * Catenate the words from 'matchwords' into 'line', computing the
> * word length of the longest single word along the way.
> *
> * @param matchwords A vector of character pointers, one for each word
> * @param matchcnt The number of entries in the matchwords vector.
> */
> void
> showresults(char **matchwords, size_t matchcnt)
> {
> size_t longest_word = 0ul;
> char *lp = line;
> char *elp = &line[sizeof(line)];
>
> for(size_t i = 0ul; i < matchcount; i++) {
> char *cp = *matchwords++;
> size_t len = 0ul;
> while ((*cp != '\0') && (lp < elp)) {
> len++;
> *lp++ = *cp++;
> }
> longest_word = max(longest_word, len);
> }
>
> if (lp < elp) *lp++ = '\0';
> else line[sizeof(line)-1] = '\0';
>
> puts(line);
> }
>
> It will silently truncate the output string if 'line'
> isn't large enough to collect all the words in 'matchwords'.
>
> The implementation of max is left to the student.
>
Oh, I see you managed to make time for this, then!
I hadn't even asked you to write any code, just to look at my results.
I can take it then that my observations were on the mark since you
aren't interested in refuting them.
[toc] | [prev] | [next] | [standalone]
| From | scott@slp53.sl.home (Scott Lurndal) |
|---|---|
| Date | 2021-08-11 20:04 +0000 |
| Message-ID | <B3WQI.8822$cd2.1956@fx02.iad> |
| In reply to | #162333 |
Bart <bc@freeuk.com> writes: >On 11/08/2021 19:54, Scott Lurndal wrote: >I can take it then that my observations were on the mark since you >aren't interested in refuting them. > No, I'm just not interested in you and your silly obsessions.
[toc] | [prev] | [next] | [standalone]
| From | DFS <nospam@dfs.com> |
|---|---|
| Date | 2021-08-11 17:04 -0400 |
| Message-ID | <aXWQI.4499$6h1.2228@fx39.iad> |
| In reply to | #162331 |
On 8/11/2021 2:54 PM, Scott Lurndal wrote:
> I was thinking more along the lines of this:
>
> static char line[12000000];
>
> /**
> * Catenate the words from 'matchwords' into 'line', computing the
> * word length of the longest single word along the way.
> *
> * @param matchwords A vector of character pointers, one for each word
> * @param matchcnt The number of entries in the matchwords vector.
> */
> void
> showresults(char **matchwords, size_t matchcnt)
> {
> size_t longest_word = 0ul;
> char *lp = line;
> char *elp = &line[sizeof(line)];
>
> for(size_t i = 0ul; i < matchcount; i++) {
> char *cp = *matchwords++;
> size_t len = 0ul;
> while ((*cp != '\0') && (lp < elp)) {
> len++;
> *lp++ = *cp++;
> }
> longest_word = max(longest_word, len);
> }
>
> if (lp < elp) *lp++ = '\0';
> else line[sizeof(line)-1] = '\0';
>
> puts(line);
> }
>
> It will silently truncate the output string if 'line'
> isn't large enough to collect all the words in 'matchwords'.
>
> The implementation of max is left to the student.
Well, I'm not a student (in the usual sense) and this isn't homework
(it's just a hobby), but I do appreciate the suggestions and code.
However:
* before constructing the string you have to find the longest word,
which you use to determine how many columns fit in the current width
of the terminal. Each word takes up the same horizontal space:
longest word + 2 blanks
* the output of your code is one long string, with no spaces between the
words and no newlines after every N columns
Substring to search for: catt
backscatterbackscatteredbackscatteringbackscattersbescattercattabucattailcattails...
If your terminal width was 70 characters, the longest word
(backscattering = 14) plus 2 spaces would dictate 4 columns (70/16 =
4.375), and the correct output is:
Substring to search for: catt
backscatter backscattered backscattering backscatters
bescatter cattabu cattail cattails
cattalo cattaloes cattalos cattan
catted catter catteries cattery
catti cattie cattier catties
cattiest cattily cattimandoo cattiness
catting cattish cattishly cattishness
cattle cattlebush cattlefold cattlegate
cattlehide cattleless cattleman cattlemen
cattleship cattleya cattleyak cattleyas
catty cattycorner cattycornered cattyman
cattyphoid copycatted copycatting discatter
overscatter rescattering scatt scatted
scatter scatterable scatteration scatteraway
scatterbrain scatterbrained scatterbrains scattered
scatteredly scatteredness scatterer scatterers
scattergood scattergram scattergraph scattergun
scattering scatteringly scatterings scatterling
scatterment scattermouch scatterplot scatterplots
scatters scattershot scattersite scattery
scattier scattiest scatting scatts
scatty tomcatted tomcatting unscattered
wildcatted wildcatter wildcatting
91 matches for catt in 0.0417 seconds
[toc] | [prev] | [next] | [standalone]
| From | Bart <bc@freeuk.com> |
|---|---|
| Date | 2021-08-11 11:09 +0100 |
| Message-ID | <sf07l7$f56$1@dont-email.me> |
| In reply to | #162305 |
On 11/08/2021 01:15, DFS wrote:
> On 8/10/2021 6:22 PM, Bart wrote:
>> On 10/08/2021 23:08, DFS wrote:
>>> On 8/10/2021 2:41 PM, Scott Lurndal wrote:
>>
>>>> I was suggesting that the compiler could have just
>>>> stored a 160k string in RO storage and called puts
>>>> with a pointer to it. There is no need to construct
>>>> it at runtime.
>>>>
>>>> The entire program would reduce to a single call
>>>> to puts with a compiler generated constant string.
>>>
>>> Gotcha.
>>>
>>> I just noticed something in my program. Using option 2 above, the
>>> version compiled by tcc crashes when the value in line 3 is large
>>> (1027424). The version compiled by gcc doesn't crash.
>>>
>>> Is that a stack overflow issue?
>>>
>>
>> Yes, you're using VLAs, (maybe in option 1 too if longword and tcols
>> are not compile-time constants).
>
> They're not. Longword is the longest word (1 to 31) in a result set,
> and tcols is the width of your terminal at the time you do the search.
>
> Here's the app: https://imgur.com/a/cQdvAeM
>
>
>
>> Typical stack size is a few MB. It seems the default stack size of tcc
>> is smaller than of gcc**. tcc crashes with this:
>>
>> int n=2000000;
>> char str[n];
>> memset(str,0,n);
>>
>> but gcc doesn't, until you change n to 4000000. If I dump the two
>> executables, then the gcc one contains this:
>>
>> Stack reserve: 2097152
>> Stack commit: 4096
>>
>> tcc's has:
>>
>> Stack reserve: 1048576
>> Stack commit: 4096
>>
>> There are probably ways of increasing the stack size, but better not
>> to use VLAs for arrays of this size. (Use static arrays or allocate on
>> the heap.)
>
>
> Thanks. I created a static array[10_000_000] outside the function, and
> it handled large results sets just fine. But another issue popped up,
> using option 2, which concatenates words one by one into that static
> array, then does one puts() at the end.
>
> Turns out it's VERY slow for large result sets.
Because each strcat involves scanning the entire string so far to find
its end.
However, this would have been the case using the VLA too, or was it fast
in that case?
Also, the idea of printing just one giant string to the screen is rather
extreme. Longer strings /are/ printed more quickly compared with very
short ones. But dozens are characters long will be sufficient; they
don't need to be millions of characters!
If you do need to construct a string of millions of characters, you
might try keeping track of the current length as antispam suggested.
Or use a resizable buffer as I normally do it, but this gets complicated.
Or write the text to a temporary file (fprintf), then just display the
file (either load it into memory, or simply use system("type filename").
[toc] | [prev] | [next] | [standalone]
| From | scott@slp53.sl.home (Scott Lurndal) |
|---|---|
| Date | 2021-08-11 13:52 +0000 |
| Message-ID | <GCQQI.17254$lK.16624@fx41.iad> |
| In reply to | #162305 |
DFS <nospam@dfs.com> writes: >On 8/10/2021 6:22 PM, Bart wrote: >> On 10/08/2021 23:08, DFS wrote: >>> On 8/10/2021 2:41 PM, Scott Lurndal wrote: >> >>>> I was suggesting that the compiler could have just >>>> stored a 160k string in RO storage and called puts >>>> with a pointer to it. There is no need to construct >>>> it at runtime. >>>> >>>> The entire program would reduce to a single call >>>> to puts with a compiler generated constant string. >>> >>> Gotcha. >>> >>> I just noticed something in my program. Using option 2 above, the >>> version compiled by tcc crashes when the value in line 3 is large >>> (1027424). The version compiled by gcc doesn't crash. >>> >>> Is that a stack overflow issue? >>> >> >> Yes, you're using VLAs, (maybe in option 1 too if longword and tcols are >> not compile-time constants). > >They're not. Longword is the longest word (1 to 31) in a result set, >and tcols is the width of your terminal at the time you do the search. > >Here's the app: https://imgur.com/a/cQdvAeM > > > >> Typical stack size is a few MB. It seems the default stack size of tcc >> is smaller than of gcc**. tcc crashes with this: >> >> int n=2000000; >> char str[n]; >> memset(str,0,n); >> >> but gcc doesn't, until you change n to 4000000. If I dump the two >> executables, then the gcc one contains this: >> >> Stack reserve: 2097152 >> Stack commit: 4096 >> >> tcc's has: >> >> Stack reserve: 1048576 >> Stack commit: 4096 >> >> There are probably ways of increasing the stack size, but better not to >> use VLAs for arrays of this size. (Use static arrays or allocate on the >> heap.) > > >Thanks. I created a static array[10_000_000] outside the function, and >it handled large results sets just fine. But another issue popped up, >using option 2, which concatenates words one by one into that static >array, then does one puts() at the end. > >Turns out it's VERY slow for large result sets. strcat is almost never the right interface to use. It needs to scan the entire string to find the terminal nul-byte before appending. As the string gets longer, each strcat takes longer than the one before. Just keep a pointer to the next element and increment the pointer each time you add a new element.
[toc] | [prev] | [next] | [standalone]
| From | Malcolm McLean <malcolm.arthur.mclean@gmail.com> |
|---|---|
| Date | 2021-08-11 08:01 -0700 |
| Message-ID | <5d8700fd-6ba7-4c72-ae2f-1d4ea91fe823n@googlegroups.com> |
| In reply to | #162312 |
On Wednesday, 11 August 2021 at 14:52:54 UTC+1, Scott Lurndal wrote: > > strcat is almost never the right interface to use. It needs > to scan the entire string to find the terminal nul-byte before > appending. As the string gets longer, each strcat takes longer > than the one before. > > Just keep a pointer to the next element and increment the > pointer each time you add a new element. > Most strings are short. Building up a url with strcat is not going to stress a 3GHz machine. If the strings become huge then, yes, you need to look at more efficient ways of concatenating them.
[toc] | [prev] | [next] | [standalone]
| From | scott@slp53.sl.home (Scott Lurndal) |
|---|---|
| Date | 2021-08-11 15:06 +0000 |
| Message-ID | <PHRQI.5464$xY.2133@fx05.iad> |
| In reply to | #162317 |
Malcolm McLean <malcolm.arthur.mclean@gmail.com> writes: >On Wednesday, 11 August 2021 at 14:52:54 UTC+1, Scott Lurndal wrote: >> >> strcat is almost never the right interface to use. It needs >> to scan the entire string to find the terminal nul-byte before >> appending. As the string gets longer, each strcat takes longer >> than the one before. >> >> Just keep a pointer to the next element and increment the >> pointer each time you add a new element. >> >Most strings are short. Building up a url with strcat is not going to >stress a 3GHz machine. If the strings become huge then, yes, you >need to look at more efficient ways of concatenating them. Building it with snprintf() will be far more flexible and efficient. Every cycle matters.
[toc] | [prev] | [next] | [standalone]
| From | Bart <bc@freeuk.com> |
|---|---|
| Date | 2021-08-11 16:47 +0100 |
| Message-ID | <sf0re4$v91$1@dont-email.me> |
| In reply to | #162318 |
On 11/08/2021 16:06, Scott Lurndal wrote:
> Malcolm McLean <malcolm.arthur.mclean@gmail.com> writes:
>> On Wednesday, 11 August 2021 at 14:52:54 UTC+1, Scott Lurndal wrote:
>>>
>>> strcat is almost never the right interface to use. It needs
>>> to scan the entire string to find the terminal nul-byte before
>>> appending. As the string gets longer, each strcat takes longer
>>> than the one before.
>>>
>>> Just keep a pointer to the next element and increment the
>>> pointer each time you add a new element.
>>>
>> Most strings are short. Building up a url with strcat is not going to
>> stress a 3GHz machine. If the strings become huge then, yes, you
>> need to look at more efficient ways of concatenating them.
>
> Building it with snprintf() will be far more flexible and efficient.
>
> Every cycle matters.
>
Start with this:
char str[100];
char* s;
Then a loop like this (all unoptimised code to stop it being optimised
out of existence):
for (int i=0; i<10000000; ++i) {
strcpy(str,"one ");
strcat(str,"two ");
strcat(str,"three ");
strcat(str,"four ");
strcat(str,"five");
}
puts(str);
took 1 second (on my Windows PC running tcc). If use sprintf():
for (int i=0; i<10000000; ++i) {
s=str;
s+=sprintf(s,"%s","one ");
s+=sprintf(s,"%s","two ");
s+=sprintf(s,"%s","three ");
s+=sprintf(s,"%s","four ");
sprintf(s,"%s","five");
}
puts(s);
then it takes 5.5 seconds. With snprintf() as you suggest, it takes 6.1
seconds. I thought you said every cycle matters?
These all write into the same string. If each iteration uses a newly
allocated 100-char string, then the strcat loop takes 2.2 seconds, and
both forms of sprintf take something over 7 seconds.
If I take the second loop above, and write the string directly (so not
using "%s"), then it makes no difference; it's not the formatting that
takes the extra time, not for %s anyway, it must be other overheads.
[toc] | [prev] | [next] | [standalone]
Page 12 of 20 — ← Prev page 1 … 10 11 [12] 13 14 … 20 Next page →
Back to top | Article view | comp.lang.c
csiph-web