suppose I have the following code occurring at 2000 spots in a program

Code:
printf("hello\n");
I imagine every time that printf is called some assembly is generated to perform this function.
Let's say it's 4 instructions to push, save registers and call printf.

What if I make a function like

Code:
void print(void) { printf("hello\n"); }
and put print() calls at 2000 spots in my program therefore hiding the 4 instructions inside print and just use 1 instruction to get to the 4 instructions.

Would this be better in terms of code size or cant I say anything in general about technique like this?