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


Groups > comp.lang.c > #23993

Re: Params -> local vars?

From Stephen Sprunk <stephen@sprunk.org>
Newsgroups comp.lang.c
Subject Re: Params -> local vars?
Date 2012-07-30 15:09 -0500
Organization A noiseless patient Spider
Message-ID <jv6pl1$p6$1@dont-email.me> (permalink)
References <jv6nmr$15k$1@speranza.aioe.org>

Show all headers | View raw


On 30-Jul-12 14:35, Jon Howson wrote:
> I was reading thru some (yellowing!) mimeographed introductory notes on C 
> and I found code like the below.
> 
> main(argc,argv)
>   int argc;
>   char *argv[];
> {
>   char *malloc();
>   char *strcpy();
>   int puts();
>   void free();
> 
>   char *s;
>   if(argc>1 &&(s=malloc(8+strlen(argv[1])))){
>     strcpy(s,"Hello, ");
>     strcpy(s+7,argv[1]);
>     puts(s);
>     free(s);
>   }else{
>     puts("Program failed, unknown error");
>   }
> }
> 
> I'm trying to work out what's happening. At the start of the function, I 
> guess the parameters are being converted into local variables, maybe a 
> way to get pass-by-value in C?
> 
> Also what is the advantage of declaring the string and memory functions 
> locally to the function?

This is K&R C, which had a different syntax for arguments and no
standard headers.  To restate it in ANSI C:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {
  char *s;

  if (argc>1 && (s = malloc(strlen(argv[1]) + 8))) {
    strcpy(s, "Hello, ");
    strcpy(s+7, argv[1]);
    puts(s);
    free(s);
  } else {
    puts("Program failed, unknown error");
  }
}

A modern coder would just use printf(), but perhaps that hadn't been
taught yet or would have obscured what the text was trying to teach
about string manipulation--or printf() was considered excessive for such
a trivial task on the day's limited machines.

Unless you're interested in software archaeology, I would recommend you
discard any text that uses K&R C, which has been obsolete since ANSI C
was published in 1989.

S

-- 
Stephen Sprunk         "God does not play dice."  --Albert Einstein
CCIE #3723         "God is an inveterate gambler, and He throws the
K5SSS        dice at every possible opportunity." --Stephen Hawking

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


Thread

Params -> local vars? Jon Howson <nospam@nospam.com> - 2012-07-30 19:35 +0000
  Re: Params -> local vars? Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-07-30 15:54 -0400
  Re: Params -> local vars? James Kuyper <jameskuyper@verizon.net> - 2012-07-30 16:00 -0400
  Re: Params -> local vars? Kenneth Brody <kenbrody@spamcop.net> - 2012-07-30 16:01 -0400
  Re: Params -> local vars? Stephen Sprunk <stephen@sprunk.org> - 2012-07-30 15:09 -0500
    Re: Params -> local vars? Mark Bluemel <mark_bluemel@pobox.com> - 2012-07-31 08:34 +0100
      Re: Params -> local vars? Kleuske <kleuske@nowhere.net> - 2012-07-31 19:29 +0000
        Re: Params -> local vars? Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-07-31 15:51 -0400
      Re: Params -> local vars? Kenneth Brody <kenbrody@spamcop.net> - 2012-08-01 15:58 -0400
  Re: Params -> local vars? Keith Thompson <kst-u@mib.org> - 2012-07-30 13:49 -0700
  Re: Params -> local vars? Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2012-07-30 21:56 -0600
  Re: Params -> local vars? David T. Ashley <dashley@gmail.com> - 2012-07-31 08:42 -0400
  Re: Params -> local vars? Tim Rentsch <txr@alumni.caltech.edu> - 2012-09-07 13:39 -0700
    Re: Params -> local vars? Keith Thompson <kst-u@mib.org> - 2012-09-07 17:55 -0700
      Re: Params -> local vars? Tim Rentsch <txr@alumni.caltech.edu> - 2012-09-08 05:09 -0700
        Re: Params -> local vars? Keith Thompson <kst-u@mib.org> - 2012-09-08 11:14 -0700
        Re: Params -> local vars? Richard Damon <news.x.richarddamon@xoxy.net> - 2012-09-08 16:43 -0400
          Re: Params -> local vars? Tim Rentsch <txr@alumni.caltech.edu> - 2012-12-17 14:13 -0800

csiph-web