diff --git a/digressions/Makefile b/digressions/Makefile index 3da0974..987521f 100644 --- a/digressions/Makefile +++ b/digressions/Makefile @@ -1,8 +1,8 @@ -CFLAGS += -g -Wall -Wextra +CFLAGS += -g -Wall -Wextra -pedantic -pedantic-errors %.class:%.java javac -d $(PWD) $^ -all: temperatures URLParts.class +all: temperatures qsort-example URLParts.class .PHONY: all diff --git a/digressions/qsort-example.c b/digressions/qsort-example.c new file mode 100644 index 0000000..1cfeea1 --- /dev/null +++ b/digressions/qsort-example.c @@ -0,0 +1,34 @@ +/* + * C Sorting example mostly from qsort(3) + */ +#include +#include +#include +#include + + +static int cmpstringp(const void *p1, const void *p2) { + /* The actual arguments to this function are "pointers to + pointers to char", but strcmp(3) arguments are "pointers + to char", hence the following cast plus dereference */ + + return strcmp(*(char * const *)p1, *(char * const *)p2); +} + + +int main(int argc, char *argv[]) { + int j; + + if (argc < 2) { + fprintf(stderr, "Usage: %s ...\n", basename(argv[0])); + exit(EXIT_FAILURE); + } + + qsort(&argv[1], argc - 1, sizeof(argv[1]), cmpstringp); + + for (j = 1; j < argc; j++) { + puts(argv[j]); + } + + exit(EXIT_SUCCESS); +}