diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..5761abcfdf0c26a75374c945dfe366eaeee04285 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.o diff --git a/python-c-api_solution/demolib.c b/python-c-api_solution/demolib.c index 39d66e9af907677bc27a2a1d813ac14276572141..fcb2dbaa941b2f1fec08a3530b27edc7989f308b 100644 --- a/python-c-api_solution/demolib.c +++ b/python-c-api_solution/demolib.c @@ -8,6 +8,12 @@ int add_number(int number_1, int number_2) { return result; } +int multiply_number(int number_1, int number_2) { + int result = number_1 * number_2; + return result; +} + + // https://stackoverflow.com/questions/8465006/how-do-i-concatenate-two-strings-in-c char* make_str(const char *s1, const char *s2) { @@ -17,8 +23,10 @@ char* make_str(const char *s1, const char *s2) { return result; } -int add_number_using_pointer() { - +int add_number_using_pointer(int (*pf)(int, int), int number_1, int number_2) { + int result; + result = pf(number_1, number_2); + return result; } diff --git a/python-c-api_solution/demolib.h b/python-c-api_solution/demolib.h index 17ce34495fadd00e04318dd51f8ff79e87c4a898..16b5644b2cb479dc909384903eb6d2ea9563ce21 100644 --- a/python-c-api_solution/demolib.h +++ b/python-c-api_solution/demolib.h @@ -3,4 +3,6 @@ // char construct_string(int number); int add_number(int number_1, int number_2); -char* make_str(const char *s1, const char *s2); \ No newline at end of file +char* make_str(const char *s1, const char *s2); +int add_number_using_pointer(int (*pf)(int, int), int number_1, int number_2); +int multiply_number(int number_1, int number_2); \ No newline at end of file diff --git a/python-c-api_solution/demolib.o b/python-c-api_solution/demolib.o index 5896b43ecea3a7fb3097c0b062930226d5bc57dd..ffc6c06f550025b0a750c2196115c828d48087e8 100644 Binary files a/python-c-api_solution/demolib.o and b/python-c-api_solution/demolib.o differ diff --git a/python-c-api_solution/main.c b/python-c-api_solution/main.c index 3e05435dd83c83c6d64510c136a6106a241cd953..27d24aa9d22c89ba889d0551a5987a91093fcb2a 100644 --- a/python-c-api_solution/main.c +++ b/python-c-api_solution/main.c @@ -1,7 +1,12 @@ #include <stdio.h> +#include <stdlib.h> #include "demolib.h" + + + + int main(void) { // Testing stuff for add_number function int getal_1=2; @@ -9,7 +14,7 @@ int main(void) { int result; result = add_number(getal_1, getal_2); - printf("%d\n", result); + printf("result of adding numbers: %d\n", result); // @@ -19,13 +24,41 @@ int main(void) { char* s = make_str(str_1, str_2); // do things with s - printf("%s\n", s); + printf("result of concatting strings: %s\n", s); free(s); // deallocate the string // - // testing stuff to - + // testing stuff to use a pointer to use a function + int (*pf)(int, int); + int pointer_res; + + pf = &add_number; + pointer_res = (pf)(5, 9); + printf("result of using a pointer to the add_number function: %d\n", pointer_res); + // + + // testing stuff to pass a pointer to a function that consecutively uses that pointer to add stuff + int (*pf2)(int, int); + int function_via_pointer_res; + + pf2 = &add_number; + function_via_pointer_res = add_number_using_pointer(pf2, 10, 20); + printf("result of calling a function with a function pointer to add_number: %d\n", function_via_pointer_res); + + int (*pf3)(int, int); + int function_via_pointer_res_2; + + pf3 = &multiply_number; + function_via_pointer_res_2 = add_number_using_pointer(pf3, 10, 20); + printf("result of calling a function with a function pointer to multiply_number: %d\n", function_via_pointer_res_2); + + + // + + + + diff --git a/python-c-api_solution/main.o b/python-c-api_solution/main.o index e29df7dd325a7b1a79365f68f3ad84979b8f9351..da6dae0c35829ddfa9513192e590a17c9e87cb85 100644 Binary files a/python-c-api_solution/main.o and b/python-c-api_solution/main.o differ diff --git a/python-c-api_solution/test_script b/python-c-api_solution/test_script index f97b74885b85f148dd55b72354cc0b1763672653..ba528aa60114d74a4dd2597f43a6fbfa1838d331 100755 Binary files a/python-c-api_solution/test_script and b/python-c-api_solution/test_script differ