Я пытаюсь сделать простой BST ADT, и у меня возникают некоторые проблемы, так как я еще новичок в C.Passing Е() в качестве параметра
собирает, но с предупреждениями и а ' note ', если я запустил программу, он печатает только один элемент, корневой узел (я хочу, чтобы он печатал все элементы inorder).
Я только предоставил фрагменты кода, которые, как я думал, были необходимы, если вы хотите, чтобы весь код просто спросил.
bst.c - BST метод обхода
41 void bst_inorder(bst b, void f(char *str)) {
42 if (b->key == NULL) {
43 return;
44 }
45 bst_inorder(b->left, f);
46 f(b->key);
47 bst_inorder(b->right, f);
48 }
test.c
14 bst_inorder(my_bst, printf);
bst.h
10 extern void bst_inorder(bst b, void f(char *str));
Я компиляции, как это
gcc -O2 -W -Wall -ansi -pedantic *.c -o TEST
и я получаю эти предупреждения
TEST.c: In function ‘main’:
TEST.c:14:4: warning: passing argument 2 of ‘bst_inorder’ from incompatible pointer type [enabled by default]
In file included from TEST.c:3:0:
bst.h:10:13: note: expected ‘void (*)(char *)’ but argument is of type ‘int (*)(const char * __ restrict__)’
Вы могли бы хотеть проверить фактическое прототип [ ' printf'] (http://en.cppreference.com/w/c/io/fprintf).Что вы, конечно, тоже имеете в сообщении об ошибке. –