Compare commits

...

2 Commits

Author SHA1 Message Date
d4b5c737e5
Switch to NULL-terminated 2D array 2024-04-19 20:44:43 -04:00
5381d5f0ce
Through lcthw ex13 plus some make rework 2024-04-19 08:14:39 -04:00
5 changed files with 45 additions and 5 deletions

3
lcthw/.ex10.argv Normal file
View File

@ -0,0 +1,3 @@
carrot
angelfood
yellow

5
lcthw/.ex13.argv Normal file
View File

@ -0,0 +1,5 @@
garble
geckle
gimple
gorble
gunkle

1
lcthw/.gitignore vendored
View File

@ -6,3 +6,4 @@ ex9
ex10
ex11
ex12
ex13

View File

@ -1,11 +1,14 @@
CFLAGS ?= -Wall -g
GDBRUN = gdb --batch --ex run --ex bt --ex q --args
BUILD_TARGETS = ex1 ex3 ex7 ex8 ex9 ex10 ex11 ex12
TEST_TARGETS = ex1 ex3 ex7 ex8 ex9 ex11 ex12
BUILD_TARGETS = $(foreach ex,$(wildcard ex*.c),$(subst .c,,$(ex)))
.PHONY: all
all: build test
.PHONY: echo
echo:
@echo BUILD_TARGETS=$(BUILD_TARGETS)
.PHONY: clean
clean:
rm -f $(BUILD_TARGETS)
@ -15,16 +18,18 @@ build: $(BUILD_TARGETS)
.PHONY: gtest
gtest:
@$(foreach bt, $(TEST_TARGETS), make .gtest.$(bt) &&) \
@$(foreach bt, $(BUILD_TARGETS), make .gtest.$(bt) &&) \
printf '\ngYAY\n'
.gtest.%:
@test_argv=$$(cat .$*.argv 2>/dev/null || echo) && \
printf '\n==> %s\n' "$*" && $(GDBRUN) ./$*
.PHONY: test
test:
@$(foreach bt, $(TEST_TARGETS), make .test.$(bt) &&) \
@$(foreach bt, $(BUILD_TARGETS), make .test.$(bt) &&) \
printf '\nYAY\n'
.test.%:
printf '\n==> %s\n' "$*" && ./$*
@test_argv=$$(cat .$*.argv 2>/dev/null || echo) && \
printf '\n==> %s\n' "$*" && ./$* $$test_argv

26
lcthw/ex13.c Normal file
View File

@ -0,0 +1,26 @@
#include <stdio.h>
int main(int argc, char *argv[])
{
int i = 0;
// go through each string in argv
// why am I skipping argv[0]?
for (i = 1; i < argc; i++) {
printf("arg %d: %s\n", i, argv[i]);
}
// let's make our own array of strings
char *states[] = {
"California",
"Oregon",
"Washington",
"Texas",
NULL,
};
for (i = 0; states[i] != NULL; i++) {
printf("state %d: %s\n", i, states[i]);
}
return 0;
}