Questions 5

  1. What is EOF in the context of scanf?
    Hints:

  2. What are standard input, standard output and standard error in the context of POSIX programming?
    Hints:

  3. Where does the function printf write to?

  4. Where does the function scanf read from?

  5. How do you redirect the standard output of a program to a file?

  6. How do you send the content of a file into a program's standard input?

  7. How do you connect the standard output of a program to the standard input of another program?

  8. What is the meaning of the following makefile variables: $@, $<, $^, CFLAGS, LDFLAGS, LDLIBS.
    Hint: GNU make manual: automatic variables, implicit variables, implicit rules.

  9. What will the following makefile print (after running command make)

    CFLAGS = -Wall -Ofast -std=c1x
    C = F
    all:
    	echo CFLAGS
    	echo $CFLAGS
    	echo $(C)FLAGS
    	echo $(CFLAGS)
    
  10. Suppose you have your whole C-program in one file main.c. Which of the following makefiles will compile and link the program into the executable file main?

    1. all: main
      
    2. main: main.c
      
    3. main: main.o
      
    4. all: main
      main: main.o
      main.o: main.c
      
    5. all: main
      main.o: main.c
      main: main.o
      
    6. main.o: main.c
      all: main
      main: main.o
      
    7. main: main.c
      	cc main.c -o main
      
    8. main: main.c
      	$(CC) $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@
      
    9. all: main
      main: main.o
      	cc main.o -o main
      main.o: main.c
      	cc -c main.c -o main.o
      
    Remember that the tabulator-sign before the command may not be copy-pasted correctly.
  11. Suppose your main function, contained in the file main.c, calls the functions foo and bar which are contained correspondingly in the files foo.c and bar.c. Which of the following makefiles will correctly compile and link your program into the executable file main after the command make?

    1. main: main.o foo.o bar.o
      
    2. main: foo.o main.o bar.o
      
    3. main: foo.o main.o bar.o
      	cc foo.o main.o bar.o -o main
      
    4. main: main.o foo.o bar.o
      	$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
      
    5. main: main.o foo.o bar.o
      main.o: main.c
      foo.o: foo.c
      	cc -c $^ -o $@
      bar.o: bar.c
      
    6. main: main.o foo.o bar.o
      	cc main.o foo.o bar.o -lm -o main
      main.o: main.c
      	cc -c main.c
      foo.o: foo.c
      	cc -c foo.c
      bar.o: bar.c
      	cc -c bar.c
      
    7. obj = main.o foo.o bar.o
      main: $(obj)
      
  12. Suppose there is the following preprocessor directive at the beginning of the file,
    #define PI 3.1415927
    
    what is the effect of it?
    1. The compiler creates a variable PI of type double and stores the value 3.1415927 in it.
    2. All occurences of the token 'PI' in the file are substituted with the token '3.1415927'.