Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #70029
| From | Soviet_Mario <SovietMario@CCCP.MIR> |
|---|---|
| Newsgroups | comp.lang.c++ |
| Subject | Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding |
| Date | 2019-11-24 12:10 +0100 |
| Organization | A noiseless patient Spider |
| Message-ID | <qrdoe9$qdb$1@dont-email.me> (permalink) |
| References | (12 earlier) <ln4kyvxh5k.fsf@kst-u.example.com> <qrb1ga$5ls$1@dont-email.me> <lnzhgmwd7n.fsf@kst-u.example.com> <qrcgr3$8gm$1@dont-email.me> <lnr21yw09k.fsf@kst-u.example.com> |
On 24/11/2019 02:06, Keith Thompson wrote:
> Soviet_Mario <SovietMario@CCCP.MIR> writes:
>> On 23/11/2019 21:27, Keith Thompson wrote:
>>> Soviet_Mario <SovietMario@CCCP.MIR> writes:
>>>> Il 23/11/19 07:04, Keith Thompson ha scritto:
>>>>> Soviet_Mario <SovietMario@CCCP.MIR> writes:
>>>>> [...]
>>>>>> let's say it explicitely
>>>>>>
>>>>>> if I have
>>>>>> union
>>>>>> {
>>>>>> struct
>>>>>> {
>>>>>> u_int_8 Red, Green, Blue, Alpha;
>>>>>> };
>>>>>> u_int_32 AllChannels;
>>>>>> };
>>>>>>
>>>>>> without PRAGMA, do I have any explicit or implicit warranty
>>>>>> that my union be 32 bit long ? If so, PRAGMA is useless. If
>>>>>> not, it seems it might be useful.
>>>>>
>>>>> Fixing the spelling of uintN_t (n=8,32) and adding a tag to the union so
>>>>> you can use it to define objects:
>>>>
>>>> again ...
>>>> Keith, I did not edit the header manually, and sized ints
>>>> HERE are spelled as I wrote.
>>> [SNIP]
>>>> as you can see the types are spelled as I wrote them, and a
>>>> search for uintXX_t does not find anything
>>>
>>> I didn't know where the names u_int_8 and u_int_32 came from,
>>> and assumed they were misspellings of uint8_t and uint32_t.
>>>
>>> On my own system, #include <sys/types.h> introduces the non-standard
>>> type names u_int{8,32}_t. It doesn't introduce u_int_{8,32}, and I
>>> don't see that name in the code you quoted (other than in your union
>>> definition) or anywhere under /usr/include on my system.
>>
>> yes I miss-spelled forgetting the final _t (but the pieces
>> of headers pasted mentioned it)
>
> To be very clear, if you need an unsigned integer type of at least 8
well strictly speaking I need a type of EXACTLY 8 bits, not more
> bits, there is almost no good reason not to use uint8_t. There is no
> good reason to use some system-specific (or even undocumented)
> equivalent.
>
> "Almost" means you might have to consider older implementations that
> don't support <stdint.h> / <cstdint>. Any version of g++ you're likely
> to encounter should support C++11 or later -- older versions might
> require an explicit option. Even older versions are likely to support
> <stdint.h> or <cstdint> as an extension.
>
>>> On the other hand, the types uint8_t and uint32_t are defined by the C
>>> and C++ standards (starting with C99 and C++11, respectively).
>>>
>>> Nobody is suggesting that you're lying or manually editing headers. All
>>> we're saying is that uint8_t and uint32_t are the *standard* types that
>>> meet your requirements, and there is no good reason to use non-standard
>>> types with similar names.
>>>
>>> Do you have some reason to prefer to use u_int_8 rather than uint8_t?
>>
>> no no reason at all. I just noticed this subtle difference
>> after having rewritten always :)
>> But It will take short to do a mass-replace and change the
>> included header
>>
>>>
>>>> is this that big problem ?
>>>> I guess the variations stands for the same concept
>>>
>>> Yes. Names other than uint8_t are non-standard and will cause your code
>>> not to compile in many environments.
>>
>>
>> well I must have mis-expressed again when I said I was
>> looking for a portable way, I actually meant I needed a way
>> that allowed proper data exchange from front-end gambas side
>> and C++ engine.
>>
>> I'll never deploy the program anywhere else. So as long as
>> it compiles here, fine enough
>
> If you use uint8_t it will compile.
>
>>>
>>>
>>>>> union u {
>>>>> struct {
>>>>> uint8_t Red, Green, Blue, Alpha;
>>>>> };
>>>>> uint32_t AllChannels;
>>>>> };
>>>>>
>>>>> (You have an anonymous struct, which is standard but wasn't added until
>>>>> C11, so older compilers might not support it, or might not support it
>>>>> by default.)
>>>>
>>>> it gives me warnings indeed, but seems to compile nevertheless
>>>
>>> What warnings?
>>
>> that anonymous structs (or unions) are non standard and
>> supported only with GCC later than some version.
>
> It's always better to copy-and-paste diagnostic messages rather than
> trying to summarize them.
well, I did not copy the warning when the compiler produced it.
I would have to re-edit the source (or restore the older
version) to just replicate the output ... maybe messing sth :\
>
> BTW, I made a serious mistake here. C supports anonymous structs as
> of C11. C++ does not support them at all. g++ does support them as
> an extension. With "g++ -std=c17 -pedantic", I get "warning: ISO C++
> prohibits anonymous structs [-Wpedantic]". My apologies for that.
no problem !!! this is not an helpdesk, I get the good
offered for free with good intention. That's more than enough !
>
> If you're only using gcc, you can use anonymous structs in C++,
> but your code will be non-portable.
yes only GCC.
BTW : as I feared, QT (even after a system reboot ...
actually power went off tonight, here it poured dogs and
cats ! 160 mm of rain in 24 hours, a disaster) did not
automatically detect the new version from MX repo. it just
still see the original version.
I'll see to this later If i find how to configure it (and
locate it first)
>
> [...]
>
>>>>> There is *no* guarantee about which of the four uint8_t members
>>>>> correspond to which part of AllChannels.
>>>>
>>>> and I don't need such warranty : I use AllChannels only for
>>>> mass-copying, assignments, copy constructor. When I need
>>>> access to separate channels I use named members.
>>>
>>> What operations do you need on AllChannels that you can't perforom on
>>> the struct? You can assign structs.
>>
>> uhm ... memberwise or all-at-once ?
>> I thought struct assignment (normally I wrote operator =)
>> should pass through memberwise copying.
>> So the aim was to copy everything in one assignment only
>> instead of four of them.
>> But if struct can be assigned smartly enough then the union
>> is not needed.
>
> The semantics of struct assignment (assuming you haven't overloaded
> operator=) are equivalent to the semantics of copying memberwise,
> but in the case of a struct containing 4 uint8_t members, no sane
> compiler will do anything other than a 32-bit copy. That's assuming
> the struct has an alignment that permits a 32-bit copy.
I would think that the existence of such monolythic member
should ensure the alignment.
I should look the asm generated, but I can't be bothered :) :)
>
> If copying the entire structure is the only operation you care about,
> keep it simple: just define the structure and use ordinary structure
> assignment.
>
> [...]
>
--
1) Resistere, resistere, resistere.
2) Se tutti pagano le tasse, le tasse le pagano tutti
Soviet_Mario - (aka Gatto_Vizzato)
Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Soviet_Mario <SovietMario@CCCP.MIR> - 2019-11-20 19:55 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Soviet_Mario <SovietMario@CCCP.MIR> - 2019-11-20 20:12 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Keith Thompson <kst-u@mib.org> - 2019-11-20 22:33 -0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Soviet_Mario <SovietMario@CCCP.MIR> - 2019-11-20 20:22 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Jorgen Grahn <grahn+nntp@snipabacken.se> - 2019-11-20 19:34 +0000
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Soviet_Mario <SovietMario@CCCP.MIR> - 2019-11-21 00:54 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Öö Tiib <ootiib@hot.ee> - 2019-11-20 16:27 -0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Manfred <invalid@add.invalid> - 2019-11-21 01:48 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Soviet_Mario <SovietMario@CCCP.MIR> - 2019-11-21 04:09 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding James Kuyper <jameskuyper@alumni.caltech.edu> - 2019-11-20 17:44 -0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Soviet_Mario <SovietMario@CCCP.MIR> - 2019-11-21 04:14 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding David Brown <david.brown@hesbynett.no> - 2019-11-20 22:03 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Soviet_Mario <SovietMario@CCCP.MIR> - 2019-11-21 01:00 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding David Brown <david.brown@hesbynett.no> - 2019-11-21 13:22 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Keith Thompson <kst-u@mib.org> - 2019-11-21 11:30 -0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding David Brown <david.brown@hesbynett.no> - 2019-11-21 22:54 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Paavo Helde <myfirstname@osa.pri.ee> - 2019-11-20 23:28 +0200
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding James Kuyper <jameskuyper@alumni.caltech.edu> - 2019-11-20 15:48 -0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Reinhardt Behm <rbehm@hushmail.com> - 2019-11-21 10:33 +0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding David Brown <david.brown@hesbynett.no> - 2019-11-21 13:25 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Keith Thompson <kst-u@mib.org> - 2019-11-20 22:32 -0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Keith Thompson <kst-u@mib.org> - 2019-11-20 22:43 -0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Soviet_Mario <SovietMario@CCCP.MIR> - 2019-11-21 12:53 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Paavo Helde <myfirstname@osa.pri.ee> - 2019-11-21 18:20 +0200
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Soviet_Mario <SovietMario@CCCP.MIR> - 2019-11-21 18:07 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Mr Flibble <flibbleREMOVETHISBIT@i42.co.uk> - 2019-11-21 17:34 +0000
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Christian Gollwitzer <auriocus@gmx.de> - 2019-11-22 07:26 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Keith Thompson <kst-u@mib.org> - 2019-11-22 00:37 -0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding David Brown <david.brown@hesbynett.no> - 2019-11-22 10:10 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Öö Tiib <ootiib@hot.ee> - 2019-11-22 02:23 -0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding David Brown <david.brown@hesbynett.no> - 2019-11-22 12:38 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Manfred <noname@add.invalid> - 2019-11-22 17:13 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding David Brown <david.brown@hesbynett.no> - 2019-11-22 18:48 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding James Kuyper <jameskuyper@alumni.caltech.edu> - 2019-11-22 10:49 -0500
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding James Kuyper <jameskuyper@alumni.caltech.edu> - 2019-11-22 10:52 -0500
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Tim Rentsch <tr.17687@z991.linuxsc.com> - 2019-11-28 12:51 -0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Soviet_Mario <SovietMario@CCCP.MIR> - 2019-11-22 11:20 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Keith Thompson <kst-u@mib.org> - 2019-11-22 10:00 -0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding David Brown <david.brown@hesbynett.no> - 2019-11-22 09:37 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Öö Tiib <ootiib@hot.ee> - 2019-11-22 01:37 -0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding David Brown <david.brown@hesbynett.no> - 2019-11-22 11:40 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Öö Tiib <ootiib@hot.ee> - 2019-11-22 04:55 -0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding David Brown <david.brown@hesbynett.no> - 2019-11-22 15:18 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Öö Tiib <ootiib@hot.ee> - 2019-11-22 07:23 -0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding David Brown <david.brown@hesbynett.no> - 2019-11-22 16:34 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding scott@slp53.sl.home (Scott Lurndal) - 2019-11-22 15:16 +0000
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Öö Tiib <ootiib@hot.ee> - 2019-11-23 05:11 -0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding James Kuyper <jameskuyper@alumni.caltech.edu> - 2019-11-22 10:56 -0500
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Öö Tiib <ootiib@hot.ee> - 2019-11-23 07:03 -0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Soviet_Mario <SovietMario@CCCP.MIR> - 2019-11-22 11:31 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding David Brown <david.brown@hesbynett.no> - 2019-11-22 12:23 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Soviet_Mario <SovietMario@CCCP.MIR> - 2019-11-22 13:14 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding David Brown <david.brown@hesbynett.no> - 2019-11-22 15:04 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Soviet_Mario <SovietMario@CCCP.MIR> - 2019-11-22 19:35 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding James Kuyper <jameskuyper@alumni.caltech.edu> - 2019-11-22 14:11 -0500
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Soviet_Mario <SovietMario@CCCP.MIR> - 2019-11-23 00:25 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding James Kuyper <jameskuyper@alumni.caltech.edu> - 2019-11-22 23:56 -0500
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Soviet_Mario <SovietMario@CCCP.MIR> - 2019-11-23 11:12 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Paavo Helde <myfirstname@osa.pri.ee> - 2019-11-23 14:51 +0200
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding James Kuyper <jameskuyper@alumni.caltech.edu> - 2019-11-25 11:45 -0500
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Keith Thompson <kst-u@mib.org> - 2019-11-22 22:04 -0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Soviet_Mario <SovietMario@CCCP.MIR> - 2019-11-23 11:26 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Keith Thompson <kst-u@mib.org> - 2019-11-23 12:27 -0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Soviet_Mario <SovietMario@CCCP.MIR> - 2019-11-24 00:54 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Keith Thompson <kst-u@mib.org> - 2019-11-23 17:06 -0800
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Soviet_Mario <SovietMario@CCCP.MIR> - 2019-11-24 12:10 +0100
Re: [QT creator on "nix"] - getting a strict 8 bit (1 byte) array with no padding Tim Rentsch <tr.17687@z991.linuxsc.com> - 2019-11-28 13:21 -0800
csiph-web