furthermore, it is essential to create theese functions and function-pointers, and to initialize a default return-value of rslt=BMP280_OK.
Here is a shorted example from my own code. You have to implant routines to get proper error-checking-

Thoose functions are called from bmp280.c .
Also - when you from main run

rslt = bmp280_init(&bmp);

Without creating thoose functions, the bmp280_init will never give you the right return values.

Also it is worth mention that you do not need to name the functions to user_blabla. You can name them to whaatever you want - as long that you imitalize the functionpointers to the same name. That gives :you can re-initialize the function-pointrs to other names, and therefore make the read-call, the write-call etcetera to call other functions than they did previousley.

I might have some stuff in this to not be 100% accurate, because I just a few hours ago, after working many hours with this, found it out out myself, and I have been up all to many hours to get this working. And I am not naturally english speaking, so there we have the languge-barriar.