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


Groups > comp.lang.c > #94548

Re: Why I use gcc

From BartC <bc@freeuk.com>
Newsgroups comp.lang.c
Subject Re: Why I use gcc
Date 2016-10-07 12:28 +0100
Organization A noiseless patient Spider
Message-ID <nt80rk$k47$1@dont-email.me> (permalink)
References (2 earlier) <nsbauh$1rn$1@dont-email.me> <kfnfuolc82w.fsf@x-alumni2.alumni.caltech.edu> <nsf05e$1nn$1@dont-email.me> <kfnintgarz8.fsf@x-alumni2.alumni.caltech.edu> <nsgv7f$n75$1@dont-email.me>

Show all headers | View raw


On 28/09/2016 18:39, BartC wrote:
> On 28/09/2016 17:50, Tim Rentsch wrote:
>> BartC <bc@freeuk.com> writes:
>
>>>  return ((int __declspec(dllimport) (*) (void))fnaddr)();  // (1)
>>>  return ((int(*) __declspec(dllimport)  (void))fnaddr)();  // (2)
>>>  return ((__declspec(dllimport) int(*)  (void))fnaddr)();  // (3)
>>>
>>> (2) is wrong on all compilers, because the (*?) is where the name of
>>> the function would go, and stdcall/declspec can't occur after the
>>> function name.
>>>
>>> So it's down to the compiler (Pelles C) compiling (1) and not
>>> (2).  It's just fussy about being before or after the type.
>>>
>>> However if __stdcall is used in these casts, then it doesn't like it
>>> at all, even though __stdcall can be used for normal declarations.  (I
>>> haven't tried declarations of pointers.)
>>
>> What happens if you try, eg,
>>
>>     (int (__stdcall *)()) function_pointer
>>
>> like what Microsoft's documentation shows for similar cases?
>
> Bingo - that works. Thanks.
>
> (However the same syntax doesn't work for __declspec(dllimport), which
> still has to be in the (1) format above.
>
> Now I just have to rewrite my C-type-spec generator to incorporate an
> internal attribute as well as a name, and take heed of these different
> rules.
>
> The code generator doesn't know what C compiler is to be used, but it
> will know whether one of __stdcall or __declspec is needed, and it looks
> like there could be a common syntax subset that is acceptable across all
> compilers.)

I'm about to implement this stuff now and tests have shown that these 
formats are best, when using function pointers:

For __stdcall (for 32-Windows), this syntax works across all compilers 
I've tried (Pelles C, lccwin, DMC, gcc, Tiny C; clang I guess will work 
like gcc):

#include <stdio.h>       // REQUIRED BY TINY C

static int *	(__stdcall *bill)	(int,int);

int main(void) {
void* fnaddr;
int * p;

     p = ((int *	(__stdcall *)	(int,int))fnaddr)(10,20);
     return  ((int (__stdcall *)	(int a,int b))fnaddr)(10,20);
}

(Tiny C needs stdio.h where __stdcall is declared. Not a big deal as it 
will nearly always be present - except when testing a fragment of code 
like this where you're tearing your hair out wondering why it works 
elsewhere but not here!)

For __declspec(dllimport) (occurs in 64-bit Windows), works across all 
compilers except Pelles C:

#include <stdio.h>

static int * (__declspec(dllimport) *bill) (int,int);

int main(void) {
void* fnaddr;
int * p;

     p = ((int *	(__declspec(dllimport) *) (int,int))fnaddr)
       (10,20);
     return  ((int (__declspec(dllimport) *) (int a,int b))fnaddr)
       (10,20);
}

For Pelles C, this is the best I could come up with:

static int __declspec(dllimport)* (*bill) (int,int);

int main(void) {
void* fnaddr;
int * p;

     p = ((int __declspec(dllimport)*(*) (int,int))fnaddr)
         (10,20);
     return  ((int __declspec(dllimport) (*) (int a,int b))fnaddr)
         (10,20);
}

It doesn't like the static declaration, but the other two are OK. With 
the static, it seems to be getting mixed up with the external attribute 
of the function being pointed to, and the static attribute of the 
pointer itself. (gcc has the same problem in this form, but I will use 
the alternate syntax for that.)

So I think I will leave Pelles C 64-bit off my list of tested compilers, 
and file a bug report. (Of course there are many other tests to do 
another than just manage to struggle through a compilation; the program 
has to link and work. And at least two of the compilers have crashed 
while linking.)

That still leaves gcc as the least troublesome compiler.

However I yet have to modify my code generator to stick the attribute 
just inside the opening "(" of the "(*)" or "(*name)" that is apparently 
always present in a function pointer declaration. It's harder than it 
sounds.

-- 
Bartc

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


Thread

Why I use gcc BartC <bc@freeuk.com> - 2016-09-26 14:31 +0100
  Re: Why I use gcc David Brown <david.brown@hesbynett.no> - 2016-09-26 15:45 +0200
    Re: Why I use gcc BartC <bc@freeuk.com> - 2016-09-26 15:22 +0100
      Re: Why I use gcc David Brown <david.brown@hesbynett.no> - 2016-09-26 16:31 +0200
      Re: Why I use gcc Tim Rentsch <txr@alumni.caltech.edu> - 2016-09-27 15:05 -0700
        Re: Why I use gcc BartC <bc@freeuk.com> - 2016-09-28 00:42 +0100
          Re: Why I use gcc Tim Rentsch <txr@alumni.caltech.edu> - 2016-09-28 09:50 -0700
            Re: Why I use gcc BartC <bc@freeuk.com> - 2016-09-28 18:39 +0100
              Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-07 12:28 +0100
                Re: Why I use gcc Malcolm McLean <malcolm.mclean5@btinternet.com> - 2016-10-07 04:36 -0700
              Re: Why I use gcc Thiago Adams <thiago.adams@gmail.com> - 2016-10-07 05:31 -0700
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-07 14:00 +0100
                Re: Why I use gcc Thiago Adams <thiago.adams@gmail.com> - 2016-10-07 07:48 -0700
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-07 17:36 +0100
                Re: Why I use gcc Thiago Adams <thiago.adams@gmail.com> - 2016-10-07 10:38 -0700
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-07 19:47 +0100
                Re: Why I use gcc Keith Thompson <kst-u@mib.org> - 2016-10-07 12:25 -0700
                Re: Why I use gcc Thiago Adams <thiago.adams@gmail.com> - 2016-10-07 12:26 -0700
                Re: Why I use gcc Keith Thompson <kst-u@mib.org> - 2016-10-07 13:10 -0700
                Re: Why I use gcc Thiago Adams <thiago.adams@gmail.com> - 2016-10-07 13:22 -0700
                Re: Why I use gcc Keith Thompson <kst-u@mib.org> - 2016-10-07 14:13 -0700
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-08 01:15 +0100
                Re: Why I use gcc James Harris <james.harris.1@gmail.com> - 2016-10-08 10:42 +0100
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-08 11:36 +0100
                Re: Why I use gcc Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-10-08 14:25 +0100
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-08 15:05 +0100
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-08 16:29 +0100
                Re: Why I use gcc Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-10-08 17:21 +0100
                Re: Why I use gcc Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-10-08 16:39 +0100
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-08 16:58 +0100
                Re: Why I use gcc Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-10-08 21:15 +0100
                Re: Why I use gcc supercat@casperkitty.com - 2016-10-08 11:27 -0700
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-08 20:09 +0100
                Re: Why I use gcc Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-10-08 21:16 +0100
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-08 21:28 +0100
                Re: Why I use gcc Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-10-09 01:19 +0100
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-09 01:36 +0100
                Re: Why I use gcc Thiago Adams <thiago.adams@gmail.com> - 2016-10-08 09:32 -0700
                Re: Why I use gcc Tim Rentsch <txr@alumni.caltech.edu> - 2016-10-09 03:44 -0700
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-09 12:07 +0100
                Re: Why I use gcc Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-10-09 12:12 +0100
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-09 12:37 +0100
                Re: Why I use gcc Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-10-09 13:57 +0100
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-09 14:32 +0100
                Re: Why I use gcc Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-10-09 20:00 +0100
                Re: Why I use gcc Malcolm McLean <malcolm.mclean5@btinternet.com> - 2016-10-09 13:14 -0700
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-09 22:54 +0100
                Re: Why I use gcc Tim Rentsch <txr@alumni.caltech.edu> - 2016-10-15 14:40 -0700
                Re: Why I use gcc James Kuyper <jameskuyper@verizon.net> - 2016-10-07 10:37 -0400
                Re: Why I use gcc supercat@casperkitty.com - 2016-10-07 07:52 -0700
                Re: Why I use gcc jameskuyper@verizon.net - 2016-10-07 09:10 -0700
                Re: Why I use gcc supercat@casperkitty.com - 2016-10-07 10:48 -0700
                Re: Why I use gcc jameskuyper@verizon.net - 2016-10-07 16:21 -0700
                Re: Why I use gcc supercat@casperkitty.com - 2016-10-08 11:15 -0700
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-07 17:12 +0100
                Re: Why I use gcc Keith Thompson <kst-u@mib.org> - 2016-10-07 12:20 -0700
                Re: Why I use gcc Thiago Adams <thiago.adams@gmail.com> - 2016-10-07 12:32 -0700
  Re: Why I use gcc Richard Heathfield <rjh@cpax.org.uk> - 2016-09-26 14:45 +0100
    Re: Why I use gcc BartC <bc@freeuk.com> - 2016-09-26 15:12 +0100
      Re: Why I use gcc Richard Heathfield <rjh@cpax.org.uk> - 2016-09-26 15:26 +0100
        Re: Why I use gcc supercat@casperkitty.com - 2016-09-26 08:00 -0700
          Re: Why I use gcc Tim Rentsch <txr@alumni.caltech.edu> - 2016-09-28 10:49 -0700
        Re: Why I use gcc BartC <bc@freeuk.com> - 2016-09-26 17:30 +0100
          Re: Why I use gcc David Brown <david.brown@hesbynett.no> - 2016-09-26 21:12 +0200
            Re: Why I use gcc jacobnavia <jacob@jacob.remcomp.fr> - 2016-09-26 22:09 +0200
            Re: Why I use gcc supercat@casperkitty.com - 2016-09-26 13:32 -0700
              Re: Why I use gcc jacobnavia <jacob@jacob.remcomp.fr> - 2016-09-26 23:14 +0200
                Re: Why I use gcc Richard Heathfield <rjh@cpax.org.uk> - 2016-09-26 22:47 +0100
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-09-27 01:13 +0100
                Re: Why I use gcc Richard Heathfield <rjh@cpax.org.uk> - 2016-09-27 01:18 +0100
                Re: Why I use gcc Keith Thompson <kst-u@mib.org> - 2016-09-26 17:41 -0700
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-09-27 02:01 +0100
                Re: Why I use gcc Keith Thompson <kst-u@mib.org> - 2016-09-27 08:41 -0700
                Re: Why I use gcc James Harris <james.harris.1@gmail.com> - 2016-09-27 01:41 +0100
                Re: Why I use gcc jameskuyper@verizon.net - 2016-09-26 18:15 -0700
                Re: Why I use gcc Gareth Owen <gwowen@gmail.com> - 2016-09-27 20:59 +0100
                Re: Why I use gcc Richard Heathfield <rjh@cpax.org.uk> - 2016-09-27 21:50 +0100
                Re: Why I use gcc Tim Rentsch <txr@alumni.caltech.edu> - 2016-09-28 06:26 -0700
                Re: Why I use gcc gazelle@shell.xmission.com (Kenny McCormack) - 2016-09-27 23:23 +0000
                Re: Why I use gcc Noob <root@127.0.0.1> - 2016-10-08 00:12 +0200
                Re: Why I use gcc James Kuyper <jameskuyper@verizon.net> - 2016-10-07 23:11 -0400
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-08 10:58 +0100
                Re: Why I use gcc jameskuyper@verizon.net - 2016-10-08 07:07 -0700
                Re: Why I use gcc Malcolm McLean <malcolm.mclean5@btinternet.com> - 2016-10-07 21:44 -0700
              Re: Why I use gcc David Brown <david.brown@hesbynett.no> - 2016-09-27 09:48 +0200
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-09-27 11:22 +0100
                Re: Why I use gcc David Brown <david.brown@hesbynett.no> - 2016-09-27 13:52 +0200
                Re: Why I use gcc jacobnavia <jacob@jacob.remcomp.fr> - 2016-09-27 14:47 +0200
                Re: Why I use gcc David Brown <david.brown@hesbynett.no> - 2016-09-27 15:18 +0200
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-09-27 14:38 +0100
                Re: Why I use gcc jacobnavia <jacob@jacob.remcomp.fr> - 2016-09-27 17:21 +0200
                Re: Why I use gcc jacobnavia <jacob@jacob.remcomp.fr> - 2016-09-27 17:17 +0200
                Re: Why I use gcc Keith Thompson <kst-u@mib.org> - 2016-09-27 08:52 -0700
                Re: Why I use gcc Robert Wessel <robertwessel2@yahoo.com> - 2016-09-30 02:00 -0500
                Re: Why I use gcc supercat@casperkitty.com - 2016-09-27 07:18 -0700
                Re: Why I use gcc Keith Thompson <kst-u@mib.org> - 2016-09-27 08:46 -0700
                Re: Why I use gcc supercat@casperkitty.com - 2016-09-27 09:11 -0700
                Re: Why I use gcc Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-09-27 13:33 +0100
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-09-27 14:13 +0100
                Re: Why I use gcc Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-09-27 15:30 +0100
                Re: Why I use gcc supercat@casperkitty.com - 2016-09-27 08:29 -0700
                Re: Why I use gcc supercat@casperkitty.com - 2016-09-27 07:11 -0700
            Re: Why I use gcc BartC <bc@freeuk.com> - 2016-09-26 21:43 +0100
            Re: Why I use gcc raltbos@xs4all.nl (Richard Bos) - 2016-09-30 17:50 +0000
          Re: Why I use gcc BartC <bc@freeuk.com> - 2016-09-27 01:04 +0100
            Re: Why I use gcc Keith Thompson <kst-u@mib.org> - 2016-09-26 17:39 -0700
              Re: Why I use gcc BartC <bc@freeuk.com> - 2016-09-27 01:49 +0100
                Re: Why I use gcc Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-09-27 11:39 +0100
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-09-27 11:56 +0100
                Re: Why I use gcc Tim Rentsch <txr@alumni.caltech.edu> - 2016-09-27 15:15 -0700
                Re: Why I use gcc David Brown <david.brown@hesbynett.no> - 2016-09-28 08:55 +0200
    Re: Why I use gcc jacobnavia <jacob@jacob.remcomp.fr> - 2016-09-26 22:11 +0200
      Re: Why I use gcc Richard Heathfield <rjh@cpax.org.uk> - 2016-09-26 22:04 +0100
  Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-10 11:39 +0100
    Re: Why I use gcc already5chosen@yahoo.com - 2016-10-10 07:32 -0700
      Re: Why I use gcc Richard Heathfield <rjh@cpax.org.uk> - 2016-10-10 16:17 +0100
        Re: Why I use gcc Robert Wessel <robertwessel2@yahoo.com> - 2016-10-10 21:09 -0500
          Re: Why I use gcc Richard Heathfield <rjh@cpax.org.uk> - 2016-10-11 04:18 +0100
          Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-11 10:56 +0100
            Re: Why I use gcc already5chosen@yahoo.com - 2016-10-11 04:08 -0700
              Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-11 13:36 +0100
                Re: Why I use gcc already5chosen@yahoo.com - 2016-10-11 06:20 -0700
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-11 14:29 +0100
                Re: Why I use gcc Keith Thompson <kst-u@mib.org> - 2016-10-11 09:31 -0700
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-11 19:38 +0100
                Re: Why I use gcc supercat@casperkitty.com - 2016-10-11 12:23 -0700
                Re: Why I use gcc jacobnavia <jacob@jacob.remcomp.fr> - 2016-10-11 23:19 +0200
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-11 23:26 +0100
                Re: Why I use gcc jacobnavia <jacob@jacob.remcomp.fr> - 2016-10-12 09:01 +0200
                Re: Why I use gcc supercat@casperkitty.com - 2016-10-12 08:55 -0700
                Re: Why I use gcc already5chosen@yahoo.com - 2016-10-12 10:52 -0700
                Re: Why I use gcc supercat@casperkitty.com - 2016-10-12 12:34 -0700
                Re: Why I use gcc Keith Thompson <kst-u@mib.org> - 2016-10-12 13:18 -0700
                Re: Why I use gcc luser droog <luser.droog@gmail.com> - 2016-10-12 13:24 -0700
                Re: Why I use gcc crankypuss <undisclosedUserid@gmail.com> - 2016-10-13 13:31 -0600
                Re: Why I use gcc Malcolm McLean <malcolm.mclean5@btinternet.com> - 2016-10-16 03:00 -0700
                Re: Why I use gcc crankypuss <undisclosedUserid@gmail.com> - 2016-10-16 04:46 -0600
                Re: Why I use gcc Malcolm McLean <malcolm.mclean5@btinternet.com> - 2016-10-16 04:05 -0700
                Re: Why I use gcc Keith Thompson <kst-u@mib.org> - 2016-10-11 12:28 -0700
                Re: Why I use gcc Thiago Adams <thiago.adams@gmail.com> - 2016-10-11 13:24 -0700
                Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-11 21:28 +0100
                Re: Why I use gcc gazelle@shell.xmission.com (Kenny McCormack) - 2016-10-11 20:43 +0000
                Re: Why I use gcc Robert Wessel <robertwessel2@yahoo.com> - 2016-10-11 23:40 -0500
            Re: Why I use gcc already5chosen@yahoo.com - 2016-10-11 04:40 -0700
      Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-10 18:19 +0100
    Re: Why I use gcc Keith Thompson <kst-u@mib.org> - 2016-10-10 09:08 -0700
      Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-10 18:04 +0100
        Re: Why I use gcc supercat@casperkitty.com - 2016-10-10 10:39 -0700
        Re: Why I use gcc Keith Thompson <kst-u@mib.org> - 2016-10-10 11:25 -0700
      Re: Why I use gcc Jerry Stuckle <jstucklex@attglobal.net> - 2016-10-10 17:05 -0400
        Re: Why I use gcc supercat@casperkitty.com - 2016-10-10 14:46 -0700
    Re: Why I use gcc BartC <bc@freeuk.com> - 2016-10-15 13:39 +0100
      Re: Why I use gcc Keith Thompson <kst-u@mib.org> - 2016-10-15 13:40 -0700
        Re: Why I use gcc already5chosen@yahoo.com - 2016-10-15 13:46 -0700

csiph-web