"I am expecting the 10 to be printed next to the "hello" but instead get a 0."
There are already examples of working versions of your code in the other answers, but little is said in the way of explanation. I will try to do that here, and offer some general suggestions.
Although your code compiles, it does so with warnings and when run, produces run-time errors. The information resulting from both of these, if heeded would likely provide a guide to addressing most of your issues. (If using GCC for example, you can set warnings to -Wall). To illustrate, here is an image showing line numbers and the warning that correspond with them on my system (not GCC, but warning are turned on)

Build warnings:

And finally, run-time error:

From these you can begin to derive some of the following observations (others listed are my own.)
- The signature of a function prototype must match its implementation. (for function1, they do not)
- If the prototype of a function is non-void, then it should return a value.
- If a function returns a value, its return value should not be ignored.
- The warning of an unused variable pointed out that you probably intended to use it as an argument here:
function1()
See comments below for other clarifications:
int function1();//this prototype is incomplete, and is inconsistent
//with the signature of its implementation
int main(void) {
int hello=10;
printf(function1());//because function1 is not returning a value, your code outputs a 0
//Function1 prototype requires it to pass an argument
// non-void function should return a value here
}
int function1(int ip){//signature of this implementation disagrees with its prototype
//because there is no value passed, ip can be any value
printf("hello%d",ip);
// non-void function should return a value here
}
function1.printf(printf(...))really doesn't make any sense. Are you thinking ofprintf()operating on a buffer populated bysprintf?