Is something like this possible in C?
#include <stdio.h>
void print_str(char *str) {
printf(str);
}
int main() {
void (*f_ptr)() = print_str,"hello world";
f_ptr();
}
//see "hello world" on stdout
In short, I’d like to have a function pointer that “stores” the arguments. The point is that the function pointer can be used later on without needing a reference to the original data.
I could use something like this to couple a function pointer and an argument reference
struct f_ptr {
void (*f)();
void *data;
}
void exec_f_ptr(f_ptr *data) {
data->f(data->data):
}
but wouldn’t be as elegant as just calling a function pointer with the argument inside.
You’re basically asking for a closure rather than a function pointer–that is, data and code in one “object.” Such objects don’t exist in standard C–you can get something similar from Apple’s blocks or from anonymous functions in other languages (or from closures outright in the languages that support them) but generally speaking you’ll have to construct some data type of your own, as you’ve discovered.