Week 3 Tutorial — Sample Solutions

    1. sum3str.c

      // sum3str.c: sum 3 hardcoded strings
      #include <stdio.h>
      #include <stdlib.h>
      
      int main() {
         char *r = "1";
         char *s = "23";
         char *t = "456";
         int i, j, k;
         if ((sscanf(r, "%d", &i) == 1) &&
             (sscanf(s, "%d", &j) == 1) &&
             (sscanf(t, "%d", &k) == 1)) {
            printf("%d\n", i+j+k);
        }
        return EXIT_SUCCESS;
      }
      

    2. sum3arg.c

      // sum3arg.c: sum 3 arguments from the command line
      #include <stdio.h>
      #include <stdlib.h>
      
      int main(int argc, char *argv[]) {
         int i, j, k;
         if ((argc == 4) &&
            (sscanf(argv[1], "%d", &i) == 1) &&
            (sscanf(argv[2], "%d", &j) == 1) &&
            (sscanf(argv[3], "%d", &k) == 1)) {
            printf("%d\n", i+j+k);
         }
         return EXIT_SUCCESS;
      }
      

    1. target: list of dependent files
      	command
      
    2. tab

    3. The command gcc -Wall -Werror -o myprog myprog.c will be executed.

    4. No action is taken. The following message will be generated.
      make: `myprog' is up to date.
      

      1. gcc -Wall -Werror -O -o prog1 prog1.c
      2. gcc -Wall -Werror -O -o prog2 prog2.c
      3. gcc -Wall -Werror -O -o prog1 prog1.c

    1. CC=gcc
      CFLAGS=-Wall -Werror -O
      
      prog1: prog1.c prog1.h
      	$(CC) $(CFLAGS) -o prog1 prog1.c
      
      prog2: prog2.c prog2.h
      	$(CC) $(CFLAGS) -o prog2 prog2.c
      
      all: prog1 prog2
      
      clean:
      	rm -f prog1.o prog2.o prog1 prog2 core
      
    2. The user can 'force' a rule for a target to be executed by 'touching' one of its dependent files.

    3. The commands for both targets prog1 and prog2 will be executed.

    4. CC=gcc
      CFLAGS=-Wall -Werror -O
      
      prog1: prog1.c prog1.h
      	$(CC) $(CFLAGS) -o $@ $<
      
      prog2: prog2.c prog2.h
      	$(CC) $(CFLAGS) -o $@ $<
      
      all: prog1 prog2
      
      clean:
      	rm -f prog1.o prog2.o prog1 prog2 core