What is EOF in the context of fscanf?
Hints:
and wikipedia article end of file.
man scanf | grep -A 1 -B 4 EOF
What are standard input, standard output and standard
error in the context of POSIX programming?
Hints:
apropos standard | grep streams
man stdin
Wikipedia: standard streams
Where does the function printf write to?
Where does the function scanf read from?
How do you redirect the standard output of a program to a file?
How do you send the content of a file into a program's standard input?
How do you connect the standard output of a program to the standard input of another program?
What is the meaning of the following makefile variables:
$@,
$<,
$^,
CFLAGS,
LDFLAGS,
LDLIBS.
Hint: GNU make's
automatic variables,
implicit variables,
implicit rules.
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)
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?
all: main
main: main.c
main: main.o
all: main
main: main.o
main.o: main.c
all: main
main.o: main.c
main: main.o
main.o: main.c
all: main
main: main.o
main: main.c
cc main.c -o main
main: main.c
$(CC) $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@
all: main
main: main.o
cc main.o -o main
main.o: main.c
cc -c main.c -o main.o
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?
main: main.o foo.o bar.o
main: foo.o main.o bar.o
main: foo.o main.o bar.o
cc foo.o main.o bar.o -o main
main: main.o foo.o bar.o
$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
main: main.o foo.o bar.o
main.o: main.c
foo.o: foo.c
cc -c $^ -o $@
bar.o: bar.c
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
obj = main.o foo.o bar.o
main: $(obj)
#define PI 3.1415927
what is the effect of it?
Practice. Remember that exercises should be done using the make
untility and Makefile.
streams to files;
Hints:
In the makefile:
double x;
FILE* in = fopen("input.dat","r");
assert(in != NULL);
FILE* out = fopen("output.dat","w");
while( fscanf(in,"%lg ",&x) != EOF ) fprintf(out,"%lg \t %lg\n",x,cos(x));
CFLAGS = -Wall -std=c99
LDLIBS = -lm
output.dat : fileio input.dat ; ./$<
input.dat : Makefile ; echo 0.0 1.0 2.0 3.0 4.0 > $@
clean : ; $(RM) input.dat output.dat fileio *.o
Hint:
or, shorter,
double x;
while( fscanf(stdin,"%lg ",&x) != EOF ) fprintf(stdout,"%lg \t %lg\n",x,cos(x));
In the makefile:
while( scanf("%lg ",&x) != EOF ) printf("%lg \t %lg\n",x,cos(x));
out.stdio.txt: stdio input.dat ; ./stdio < input.dat > out.stdio.txt
Hint:
In the makefile (the automatic variable
for(int i=1; i<argc; i++){double x=atof(argv[i]); printf("%lg\t%lg\n",x,cos(x));}
$@ stands for
the name of the target of the rule):
out.cmdio.txt: cmdio makefile ; ./cmdio 1.0 1.1 1.2 1.3 > $@
Implement a function, let's call it "eval", which has two arguments: i) a double function of double argument, and ii) a double number. The function has to evaluate the argument-function at the argument-number and return the result.
Implement a program that reads a set a double numbers from its command-line and then prints out their average to the standrd output.
Implement a program that reads a sequence of double numbers from the standard input and, after reading each number, prints the average of the numbers read so far to the standard output.