qsort

Discussion in 'C Programming' started by Ron Ford, Aug 27, 2008.

  1. Ron Ford

    Ron Ford Guest

    Is qsort an intrinsic for C?
    --
    We must respect the other fellow's religion, but only in the sense and to
    the extent that we respect his theory that his wife is beautiful and his
    children smart. 5
    H. L. Mencken
    Ron Ford, Aug 27, 2008
    #1
    1. Advertising

  2. Ron Ford

    Ron Ford Guest

    On Tue, 26 Aug 2008 22:05:01 -0400, Eric Sosman posted:

    > Ron Ford wrote:
    >>
    >> Is qsort an intrinsic for C?

    >
    > qsort() is a function in C's Standard library, available
    > for use in all hosted implementations.
    >
    > What's an "intrinsic?"


    An intrinsic is something that comes with the food in a given syntax.

    One of my intrinsics is that I like Hillary. Your mileage may vary.

    I don't see qsort in K&R as I leaf through or in the index. Did I
    photograph the wrong target when I thought to have read of qsort in K&R?
    --
    We are here and it is now. Further than that, all human knowledge is
    moonshine. 3
    H. L. Mencken
    Ron Ford, Aug 27, 2008
    #2
    1. Advertising

  3. Ron Ford

    Guest

    On Aug 27, 5:47 am, Ron Ford <> wrote:
    > On Tue, 26 Aug 2008 22:05:01 -0400, Eric Sosman posted:
    >
    > > Ron Ford wrote:

    >
    > >> Is qsort an intrinsic for C?

    >
    > > qsort() is a function in C's Standard library, available
    > > for use in all hosted implementations.

    >
    > > What's an "intrinsic?"

    >
    > An intrinsic is something that comes with the food in a given syntax.


    No it's not.

    > One of my intrinsics is that I like Hillary. Your mileage may vary.


    Nonsense.

    > I don't see qsort in K&R as I leaf through or in the index. Did I
    > photograph the wrong target when I thought to have read of qsort in K&R?


    Photograph the wrong target? nonsense.
    Which K&R? See Appendix B in K&R2.
    , Aug 27, 2008
    #3
  4. Ron Ford

    Ron Ford Guest

    On Tue, 26 Aug 2008 19:55:00 -0700 (PDT), posted:

    > On Aug 27, 5:47 am, Ron Ford <> wrote:
    >> On Tue, 26 Aug 2008 22:05:01 -0400, Eric Sosman posted:
    >>
    >>> Ron Ford wrote:

    >>
    >>>> Is qsort an intrinsic for C?

    >>
    >>> qsort() is a function in C's Standard library, available
    >>> for use in all hosted implementations.

    >>
    >>> What's an "intrinsic?"

    >>
    >> An intrinsic is something that comes with the food in a given syntax.

    >
    > No it's not.
    >
    >> One of my intrinsics is that I like Hillary. Your mileage may vary.

    >
    > Nonsense.
    >
    >> I don't see qsort in K&R as I leaf through or in the index. Did I
    >> photograph the wrong target when I thought to have read of qsort in K&R?

    >
    > Photograph the wrong target? nonsense.
    > Which K&R? See Appendix B in K&R2.


    So we have vippstar, who broke his clc cherry to respond to me.

    The appendices in K&R are numbered.

    Your tjas are too.
    --
    We must be willing to pay a price for freedom. 4
    H. L. Mencken
    Ron Ford, Aug 27, 2008
    #4
  5. Ron Ford

    Ian Collins Guest

    Ron Ford wrote:
    >
    > The appendices in K&R are numbered.
    >

    In hex maybe, but certainly not in decimal.

    --
    Ian Collins.
    Ian Collins, Aug 27, 2008
    #5
  6. Ron Ford

    Ron Ford Guest

    On Wed, 27 Aug 2008 08:56:11 +0200, Sensei posted:

    > On 2008-08-27 06:10:21 +0200, Ron Ford <> said:
    >
    >>>> I don't see qsort in K&R as I leaf through or in the index. Did I
    >>>> photograph the wrong target when I thought to have read of qsort in K&R?
    >>>
    >>> Photograph the wrong target? nonsense.
    >>> Which K&R? See Appendix B in K&R2.

    >>
    >> So we have vippstar, who broke his clc cherry to respond to me.
    >>
    >> The appendices in K&R are numbered.
    >>
    >> Your tjas are too.

    >
    > If by "number" you mean A, B, and C then yes. My own K&R second edition
    > shows nice "qsort function" and "qsort library function" lines in the
    > index at the end of the book.


    I see it now, beginning §4.10.

    Dankenstein,
    --
    When a new source of taxation is found it never means, in practice, that
    the old source is abandoned. It merely means that the politicians have two
    ways of milking the taxpayer where they had one before. 8
    H. L. Mencken
    Ron Ford, Aug 27, 2008
    #6
  7. Ron Ford

    Richard Bos Guest

    (Richard Harter) wrote:

    > On Tue, 26 Aug 2008 22:05:01 -0400, Eric Sosman
    >
    > >Ron Ford wrote:
    > >>
    > >> Is qsort an intrinsic for C?


    > > What's an "intrinsic?"

    >
    > The term is used in Fortran and elsewhere; it means that the
    > function in question is an intrinsic part of the language in
    > contrast to being part of a library.


    "A" library, or _the_ Standard Library? Languages which use the term
    "intrinsic" usually don't distinguish between those two. C does.

    > So, no, qsort is not an intrinsic; if it were you wouldn't need
    > to include stdlib.h nor would you need to link in the standard
    > library.


    OTOH, qsort _is_ an intrinsic; if it weren't, you couldn't depend on it
    existing in every conforming hosted implementation, on any system.

    > Nor could you write your own qsort and use it, either by omitting to
    > include stdlib.h, or by simply replacing qsort in the standard library.


    Guess what: despite the shoot-your-own-foot permission some
    implementations may give you, the Standard doesn't guarantee that you
    can do that, either.

    Richard
    Richard Bos, Aug 27, 2008
    #7
  8. Ron Ford

    Chris Torek Guest

    In article <>
    Richard Harter <> wrote:
    >You can have intrinsics and still have a standard library. Some
    >languages do. Regardless, if something is an intrinsic you don't
    >need a library to get it.


    That last seems like an odd statement to me, given that (e.g.) the
    Fortran systems I have used have relied on a library (the one
    automatically included by the "fort" or "f66" or "f77" or whatever
    front-end command) to supply the code for most of the various
    intrinsics.

    (For that matter, the "standard C library" normally does not require
    special link options when using the usual front-end commands. The
    "-lm" flag to cc/gcc is the glaring annoying exception to this rule.)

    >>Guess what: despite the shoot-your-own-foot permission some
    >>implementations may give you, the Standard doesn't guarantee that you
    >>can [use your own qsort], either.

    >
    >Quite true, but beside the point. It is not even potentially
    >possible for intrinsics, since they aren't in libraries.


    Again, in a number of those Fortran systems, it was easy to use
    your own code for intrinsics, simply by adding the appropriate
    object or library file to the link line (as the default Fortran
    library was linked at the end). As in C, this was rarely if ever
    officially supported, and sometimes the call you expected got
    short-circuited, so (just as with C systems) you had to know what
    you were doing. But it was more than just "potentially possible":
    sometimes we even did it (to use special instructions, or work
    around an implementation bug).
    --
    In-Real-Life: Chris Torek, Wind River Systems
    Salt Lake City, UT, USA (40°39.22'N, 111°50.29'W) +1 801 277 2603
    email: gmail (figure it out) http://web.torek.net/torek/index.html
    Chris Torek, Aug 27, 2008
    #8
  9. Ron Ford

    Ron Ford Guest

    On 27 Aug 2008 19:34:20 GMT, Chris Torek posted:

    > In article <>
    > Richard Harter <> wrote:
    >>You can have intrinsics and still have a standard library. Some
    >>languages do. Regardless, if something is an intrinsic you don't
    >>need a library to get it.

    >
    > That last seems like an odd statement to me, given that (e.g.) the
    > Fortran systems I have used have relied on a library (the one
    > automatically included by the "fort" or "f66" or "f77" or whatever
    > front-end command) to supply the code for most of the various
    > intrinsics.
    >
    > (For that matter, the "standard C library" normally does not require
    > special link options when using the usual front-end commands. The
    > "-lm" flag to cc/gcc is the glaring annoying exception to this rule.)


    Thanks, Chris, there is definitely a useful contrast here between C and the
    common extension that is fortran. I'm reconfiguring my mingw C capability
    but think I can call qsort from another syntax. Since C is likely to be
    under the hood of many syntaxes that can call C, I wanted to see how to do
    this thing that I think is important.

    Calling it from a place without every C99 guarantee is a bit of a trick:

    %- > Is qsort an intrinsic for C?
    %-
    %- Yes, but despite the name it isn't guaranteed to
    %- implement quicksort.
    %-
    %- The advantage is that it can sort an array of any kind
    %- of data structure given a pointer to the array (usual
    %- for C), the length, the length of each array element
    %- (which must be in contiguous storage), and a comparison
    %- function. The comparison function is given pointers to
    %- two elements and returns a positive, zero, or negative
    %- value if the first is greater then, equal to, or less
    %- than the second. With the appropriate compare function
    %- the array can be an array of pointers, or structures
    %- containing pointers.
    %-
    %- To do that in Fortran 2003 might also require a routine
    %- to copy such array elements.

    Is Glen (quoted) correct?


    >
    >>>Guess what: despite the shoot-your-own-foot permission some
    >>>implementations may give you, the Standard doesn't guarantee that you
    >>>can [use your own qsort], either.

    >>
    >>Quite true, but beside the point. It is not even potentially
    >>possible for intrinsics, since they aren't in libraries.

    >
    > Again, in a number of those Fortran systems, it was easy to use
    > your own code for intrinsics, simply by adding the appropriate
    > object or library file to the link line (as the default Fortran
    > library was linked at the end). As in C, this was rarely if ever
    > officially supported, and sometimes the call you expected got
    > short-circuited, so (just as with C systems) you had to know what
    > you were doing. But it was more than just "potentially possible":
    > sometimes we even did it (to use special instructions, or work
    > around an implementation bug).


    I guess the notion of keyword is less sacred in the non C world. They say
    you just change what the linker finds first.
    --
    What men value in this world is not rights but privileges. 7
    H. L. Mencken
    Ron Ford, Sep 3, 2008
    #9
  10. Ron Ford

    Chris Torek Guest

    >> In article <>
    >> Richard Harter <> wrote:
    >>>You can have intrinsics and still have a standard library. Some
    >>>languages do. Regardless, if something is an intrinsic you don't
    >>>need a library to get it.


    >On 27 Aug 2008 19:34:20 GMT, Chris Torek posted:
    >> That last seems like an odd statement to me ...


    In article <>
    Ron Ford <> wrote:
    >Thanks, Chris, there is definitely a useful contrast here between C and the
    >common extension that is fortran. I'm reconfiguring my mingw C capability
    >but think I can call qsort from another syntax. Since C is likely to be
    >under the hood of many syntaxes that can call C, I wanted to see how to do
    >this thing that I think is important.


    I have no idea what you mean by this, so I will ignore it.

    >Calling it from a place without every C99 guarantee is a bit of a trick:
    >
    >%- > Is qsort an intrinsic for C?
    >%-
    >%- Yes, but despite the name it isn't guaranteed to
    >%- implement quicksort.
    >%-
    >%- The advantage is that it can sort an array of any kind
    >%- of data structure given a pointer to the array (usual
    >%- for C), the length, the length of each array element
    >%- (which must be in contiguous storage), and a comparison
    >%- function. The comparison function is given pointers to
    >%- two elements and returns a positive, zero, or negative
    >%- value if the first is greater then, equal to, or less
    >%- than the second. With the appropriate compare function
    >%- the array can be an array of pointers, or structures
    >%- containing pointers.
    >%-
    >%- To do that in Fortran 2003 might also require a routine
    >%- to copy such array elements.
    >
    >Is Glen (quoted) correct?


    I assume by "(quoted)" you refer to the statements marked "%-"
    here.

    The first statement (that it is an "intrinsic") is correct *if*
    "intrinsic" means, as I would assume in this case, "the compiler
    is allowed to recognize the name, and make assumptions about it,
    e.g., replacing the call with inline code so that no library routine
    is called". The part of the statement that says it is not guaranteed
    to implement (Hoare's) Quick Sort is true unconditionally.

    (If "intrinsic" means "something that need not use normal function
    call syntax" -- as is true of Fortran's power operator, for instance,
    even though A**B may call a library routine -- then this part of the
    statement is false. There may be several other things people mean
    by the word "intrinsic", depending on what language(s) they have
    used. For instance, SNOBOL's string operations and success/fail
    behavior could be considered its "intrinsics". Under most of these
    meanings, I believe C's qsort() would not be an "intrinsic".)

    The second part of the statement, about the advantage, is true.
    (But there is a constraint on the comparison function: it must be
    consistent. That is, the result of (*compar)(A,B) must stay the
    same from call to call when A and B indicate the same element,
    even if that element moves within the array.)

    The third part of the statement, concerning Fortran 2003: I have
    no idea. The last time I used Fortran was pre-1990.

    [Regarding substituting for "library"-section functions, i.e., stuff
    described in section 7 of the C Standard:]

    >I guess the notion of keyword is less sacred in the non C world.
    >They say you just change what the linker finds first.


    Be careful when talking with "them". :)

    As was the case with Fortran through the 1980s at least, this only
    *sometimes* works. For instance, with gcc:

    #include <stdio.h>

    int main(void) {
    printf("hello world\n");
    return 0;
    }

    does not always call the library printf() routine. (Sometimes it
    calls the library puts() routine, depending on optimization options.)

    Similarly, "calls" to sqrt() or memcpy() can be replaced, under
    some conditions, with inline instructions. So attempts to subvert
    the library need not work, and -- unless you know what you are
    doing, or verify quite carefully -- some *do* not work, on real
    systems.

    That said, I do not know of any C implementations that modify calls
    to qsort(). Of course, this does not guarantee that none exist.
    (Among other things, to cross comp.lang.c threads a bit, I have
    never seen or used a [full] C99 implementation. Perhaps one of
    those -- several are rumored to exist -- might substitute some
    qsort() calls, for instance.)
    --
    In-Real-Life: Chris Torek, Wind River Systems
    Salt Lake City, UT, USA (40°39.22'N, 111°50.29'W) +1 801 277 2603
    email: gmail (figure it out) http://web.torek.net/torek/index.html
    Chris Torek, Sep 5, 2008
    #10
  11. In article <>,
    Eric Sosman <> pouted:
    ....
    > Yes, but this isn't comp.lang.fortran nor alt.st.elsewhere.
    >Also, you will find that the word "intrinsic" appears nowhere in
    >the C Standard, not even in non-normative text. I asked the
    >question to learn what "Ron Ford" thought the word meant, but
    >learned instead that "Ron Ford" is not worth paying any heed to.


    Just how old are you? 8? 10? 12?

    Don't you think now might be a good time to do some growing up?

    The nice thing about growing up is that you might be able to hold down a
    job. Then, you might actually be able to afford a place of your own.
    Then (and this is the good part), you won't have to worry anymore about
    mommy taking away your computer privileges.
    Kenny McCormack, Sep 6, 2008
    #11
  12. In article <>,
    Richard Harter <> wrote:
    ....
    >Quite true; still it isn't really necessary in comp.lang.c to
    >pretend that the rest of the world doesn't exist. If someone
    >asks if you can do closures in C, it's not much of an answer to
    >say that closures aren't defined in the standard.


    It is the only acceptable answer here.
    Kenny McCormack, Sep 6, 2008
    #12
  13. On 6 Sep 2008 at 20:35, Kenny McCormack wrote:
    > Don't you think now might be a good time to do some growing up?
    >
    > The nice thing about growing up is that you might be able to hold down
    > a job.


    If you believe his email address, Sossman is employed by Sun. I wonder
    what they'd make to someone conducting a hate campaign against Jacob
    Navia with their company's name stamped all over it.
    Antoninus Twink, Sep 6, 2008
    #13
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. richard

    Re: qsort and structs and ptrs

    richard, Aug 14, 2003, in forum: C Programming
    Replies:
    0
    Views:
    385
    richard
    Aug 14, 2003
  2. richard

    crashing qsort

    richard, Aug 14, 2003, in forum: C Programming
    Replies:
    34
    Views:
    1,339
  3. Debashish Chakravarty

    [possibly OT] the comparison function in qsort

    Debashish Chakravarty, Nov 23, 2003, in forum: C Programming
    Replies:
    0
    Views:
    311
    Debashish Chakravarty
    Nov 23, 2003
  4. Ingo Brueckl
    Replies:
    5
    Views:
    480
    Keith Thompson
    Dec 19, 2003
  5. Charlie Zender

    Need warning-free qsort() comparison functions

    Charlie Zender, Jan 1, 2004, in forum: C Programming
    Replies:
    21
    Views:
    1,251
Loading...

Share This Page