Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > what is cdecl

Reply
Thread Tools

what is cdecl

 
 
Amandil
Guest
Posts: n/a
 
      03-04-2008
Hi, all.

I know this is not standard C, but I see the word cdecl used as a type
qualifier (?) in external declarations - including the standard
headers - and I'd like to know what it means (and how they it's used).
It is, as far as I know, an extension to std C by several compilers.
(Some use __cdecl instead, which is allowed by the standard.)

This may be off-topic on clc because it's not standard, but I believe
an extension that is common to many compilers isn't so far off the
mark. I apologize if I'm wrong on that point.

-- Marty Amandil (not quite ready to face the firing squad)
 
Reply With Quote
 
 
 
 
Kenny McCormack
Guest
Posts: n/a
 
      03-04-2008
In article <(E-Mail Removed)>,
Amandil <(E-Mail Removed)> wrote:
>Hi, all.
>
>I know this is not standard C, but I see the word cdecl used as a type
>qualifier (?) in external declarations - including the standard
>headers - and I'd like to know what it means (and how they it's used).
>It is, as far as I know, an extension to std C by several compilers.
>(Some use __cdecl instead, which is allowed by the standard.)
>
>This may be off-topic on clc because it's not standard, but I believe
>an extension that is common to many compilers isn't so far off the
>mark. I apologize if I'm wrong on that point.
>
>-- Marty Amandil (not quite ready to face the firing squad)


As far as the dorks in this NG are concerned the use of the "cdecl"
"qualifier" is no more (and no less) relevant to the price of hay in
Kansas than is the use of the "ThroatWarbler Mangrove" "qualifier".

 
Reply With Quote
 
 
 
 
Mark Bluemel
Guest
Posts: n/a
 
      03-04-2008
Amandil wrote:
> Hi, all.
>
> I know this is not standard C, but I see the word cdecl used as a type
> qualifier (?) in external declarations - including the standard
> headers - and I'd like to know what it means (and how they it's used).
> It is, as far as I know, an extension to std C by several compilers.
> (Some use __cdecl instead, which is allowed by the standard.)


When I want to know such things I use Google. Did you try that?

http://en.wikipedia.org/wiki/X86_cal...ventions#cdecl probably
tells you what you want to know.

> This may be off-topic on clc because it's not standard, but I believe
> an extension that is common to many compilers isn't so far off the
> mark. I apologize if I'm wrong on that point.


From my brief examination of the webpage cited above, I get the
impression that it's a) platform-specific and b) not restricted to
C implementations. I'd say it's pretty off-topic. The firing squad
are loading their weapons, it's probably time for a final cigar...
 
Reply With Quote
 
santosh
Guest
Posts: n/a
 
      03-04-2008
Amandil wrote:

> Hi, all.
>
> I know this is not standard C, but I see the word cdecl used as a type
> qualifier (?) in external declarations - including the standard
> headers - and I'd like to know what it means (and how they it's used).
> It is, as far as I know, an extension to std C by several compilers.
> (Some use __cdecl instead, which is allowed by the standard.)
>
> This may be off-topic on clc because it's not standard, but I believe
> an extension that is common to many compilers isn't so far off the
> mark. I apologize if I'm wrong on that point.


It's a compiler attribute to specify the C calling convention for that
function. A calling convention specifies the machine level interface of
that function, i.e, where the function expects it's arguments, where it
returns it's return value, whether it pops of it's arguments or whether
the caller must do that and other such details.

The C calling convention specifies that a function's arguments must be
pushed on to the stack in reverse order of their position in the
function's definition or prototype. It also states that the function's
caller is responsible for balancing the stack after the function call.
The return value would of course be in different places depending on
the architecture, but for the x86 they are in registers EAX or EDX:EAX
depending on their size. Larger structures may have to be returned on
the stack.

Note that the "C" calling convention has not been codified by the
standard, but is more of a de facto standard among compilers and
systems that has become ubiquitous due to widespread usage.

There are many other calling conventions. Some other popular ones
are "stdcall", and "fastcall".

A Google search will give you far more (and far better) details on all
of these subjects.

 
Reply With Quote
 
Amandil
Guest
Posts: n/a
 
      03-04-2008
On Mar 4, 11:58 am, Mark Bluemel <(E-Mail Removed)> wrote:
> Amandil wrote:
> > Hi, all.

>
> > I know this is not standard C, but I see the word cdecl used as a type
> > qualifier (?) in external declarations - including the standard
> > headers - and I'd like to know what it means (and how they it's used).
> > It is, as far as I know, an extension to std C by several compilers.
> > (Some use __cdecl instead, which is allowed by the standard.)

>
> When I want to know such things I use Google. Did you try that?
>
> http://en.wikipedia.org/wiki/X86_cal...#cdeclprobably
> tells you what you want to know.


Thanks. Tells me enough, I suppose.

> > This may be off-topic on clc because it's not standard, but I believe
> > an extension that is common to many compilers isn't so far off the
> > mark. I apologize if I'm wrong on that point.

>
> From my brief examination of the webpage cited above, I get the
> impression that it's a) platform-specific and b) not restricted to
> C implementations. I'd say it's pretty off-topic. The firing squad
> are loading their weapons, it's probably time for a final cigar...


I didn't realize it was platform specific. I guess I just don't get
around that much. I did see it both on the MS C compiler and on gcc,
so I assumed it was used more than that.

I don't smoke, but I'm eating my last meal and saying my prayers...
Really, I'm sorry I was OT, I just didn't know where else to go. I am,
after all, still fairly new. Again, apologies and thanks.

-- Marty Amandil (hiding in the bomb shelter...)
 
Reply With Quote
 
Amandil
Guest
Posts: n/a
 
      03-04-2008
On Mar 4, 12:07 pm, santosh <(E-Mail Removed)> wrote:
> Amandil wrote:
> > Hi, all.

>
> > I know this is not standard C, but I see the word cdecl used as a type
> > qualifier (?) in external declarations - including the standard
> > headers - and I'd like to know what it means (and how they it's used).
> > It is, as far as I know, an extension to std C by several compilers.
> > (Some use __cdecl instead, which is allowed by the standard.)

>
> > This may be off-topic on clc because it's not standard, but I believe
> > an extension that is common to many compilers isn't so far off the
> > mark. I apologize if I'm wrong on that point.

>
> It's a compiler attribute to specify the C calling convention for that
> function. A calling convention specifies the machine level interface of
> that function, i.e, where the function expects it's arguments, where it
> returns it's return value, whether it pops of it's arguments or whether
> the caller must do that and other such details.
>

<etc. Snipped for brevity. I hate long quotes>

Thanks. I basically know about the C calling convention, so I
understand your answer well enough. I hadn't known about cdecl being
related to those, though.

-- Marty
 
Reply With Quote
 
Kenny McCormack
Guest
Posts: n/a
 
      03-04-2008
In article <fqjv30$eii$(E-Mail Removed)>,
Mark Bluemel <(E-Mail Removed)> wrote:
>Amandil wrote:
>> Hi, all.
>>
>> I know this is not standard C, but I see the word cdecl used as a type
>> qualifier (?) in external declarations - including the standard
>> headers - and I'd like to know what it means (and how they it's used).
>> It is, as far as I know, an extension to std C by several compilers.
>> (Some use __cdecl instead, which is allowed by the standard.)

>
>When I want to know such things I use Google. Did you try that?
>
>http://en.wikipedia.org/wiki/X86_cal...ventions#cdecl probably
>tells you what you want to know.


Note that, according to the dogma of clc, Wikipedia is a) the work of
the devil and b) completely unreliable. If you don't believe me, feel
free to use Google Groups and you'll see.

So, one certainly can't use Wikipedia as a suggested reference resource
and still expect to keep one's Clique membership in good standing.

Furthermore, and I'm now speaking entirely seriously, without
tongue-in-cheek, maybe the OP would actually *like* to hear your
opinions. Maybe he actually would prefer the commentary of real, live,
honest-to-goodness humans, instead of sterile cold reference material.

Ever think of that?

P.S. Of course, once he's spent some time in CLC, he'll realize that
there aren't any real, live, honest-to-goodness humans here, but that
doesn't mean he can't come in with honest expectations.

 
Reply With Quote
 
Eric Sosman
Guest
Posts: n/a
 
      03-04-2008
santosh wrote:
> [...]
> The C calling convention specifies that a function's arguments must be
> pushed on to the stack in reverse order of their position in the
> function's definition or prototype. It also states that the function's
> caller is responsible for balancing the stack after the function call.
> The return value would of course be in different places depending on
> the architecture, but for the x86 they are in registers EAX or EDX:EAX
> depending on their size. Larger structures may have to be returned on
> the stack.
>
> Note that the "C" calling convention has not been codified by the
> standard, but is more of a de facto standard among compilers and
> systems that has become ubiquitous due to widespread usage.
> [...]


"Ubiquitous" means "existing or being everywhere, esp. at
the same time; omnipresent." Since there are plenty of machines
around that use non-stack storage for at least some arguments,
and that assign the responsibility for stack management (if
any) differently, "common" might be a better choice of word.

"Common" means "hackneyed; trite, of mediocre or inferior
quality; mean; low, coarse; vulgar, lacking rank, station,
distinction, etc.; unexceptional; ordinary."

--
http://www.velocityreviews.com/forums/(E-Mail Removed)
 
Reply With Quote
 
Kenny McCormack
Guest
Posts: n/a
 
      03-04-2008
In article <1204653046.197140@news1nwk>,
Eric Sosman <(E-Mail Removed)> wrote:
>santosh wrote:
>> [...]
>> The C calling convention specifies that a function's arguments must be
>> pushed on to the stack in reverse order of their position in the
>> function's definition or prototype. It also states that the function's
>> caller is responsible for balancing the stack after the function call.
>> The return value would of course be in different places depending on
>> the architecture, but for the x86 they are in registers EAX or EDX:EAX
>> depending on their size. Larger structures may have to be returned on
>> the stack.
>>
>> Note that the "C" calling convention has not been codified by the
>> standard, but is more of a de facto standard among compilers and
>> systems that has become ubiquitous due to widespread usage.
>> [...]

>
> "Ubiquitous" means "existing or being everywhere, esp. at
>the same time; omnipresent." Since there are plenty of machines
>around that use non-stack storage for at least some arguments,
>and that assign the responsibility for stack management (if
>any) differently, "common" might be a better choice of word.
>
> "Common" means "hackneyed; trite, of mediocre or inferior
>quality; mean; low, coarse; vulgar, lacking rank, station,
>distinction, etc.; unexceptional; ordinary."
>
>--
>(E-Mail Removed)


Eric is a "Tireless Rebutter". Comments?

 
Reply With Quote
 
Richard
Guest
Posts: n/a
 
      03-04-2008
(E-Mail Removed) (Kenny McCormack) writes:

> In article <1204653046.197140@news1nwk>,
> Eric Sosman <(E-Mail Removed)> wrote:
>>santosh wrote:
>>> [...]
>>> The C calling convention specifies that a function's arguments must be
>>> pushed on to the stack in reverse order of their position in the
>>> function's definition or prototype. It also states that the function's
>>> caller is responsible for balancing the stack after the function call.
>>> The return value would of course be in different places depending on
>>> the architecture, but for the x86 they are in registers EAX or EDX:EAX
>>> depending on their size. Larger structures may have to be returned on
>>> the stack.
>>>
>>> Note that the "C" calling convention has not been codified by the
>>> standard, but is more of a de facto standard among compilers and
>>> systems that has become ubiquitous due to widespread usage.
>>> [...]

>>
>> "Ubiquitous" means "existing or being everywhere, esp. at
>>the same time; omnipresent." Since there are plenty of machines
>>around that use non-stack storage for at least some arguments,
>>and that assign the responsibility for stack management (if
>>any) differently, "common" might be a better choice of word.
>>
>> "Common" means "hackneyed; trite, of mediocre or inferior
>>quality; mean; low, coarse; vulgar, lacking rank, station,
>>distinction, etc.; unexceptional; ordinary."
>>
>>--
>>(E-Mail Removed)

>
> Eric is a "Tireless Rebutter". Comments?


I can only comment that he has the usage of "common" almost entirely wrong in
this context. And is being, as a result, somewhat misleading.

'It is very "common" to find' doesn't mean anything to do with low
quality, trite etc whatsoever. Why he should do this I'm not sure. Yes
"ordinary" would be ok, but why include all the negative connotations
too?

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[cdecl] and const keyword MaciekL C Programming 0 02-09-2011 01:44 PM
cdecl shanti C Programming 12 06-08-2007 06:33 AM
Original authors and licensing of cdecl / c++decl richard.wm.jones@gmail.com C Programming 5 03-14-2007 04:23 PM
help with 'left-right' cdecl rule James Brown [MVP] C Programming 6 02-14-2006 04:18 PM
cdecl test cases Tor Rustad C Programming 12 03-28-2005 09:18 PM



Advertisments