We need more details.
Header files aren't supposed to contain function definitions, in C. Function declaration, yes, but definitions, unless they are inlined, no. Could it be related to YCM? YCM isn't able to jump to a function definition that isn't in the same translation unit as the current file.
For this, you'll need to index the files in your project. ctags is one way to do it. exhuberant-ctags is no longer maintained. For C projects, you shouldn't see any differences. For C++, there is a big one: use the fork: universal-ctags instead.
BTW, I index my C++ projects with a plugin of mine that takes care of the options
ctags --tag-relative=yes --c++-kinds=+pf --fields=+imaSft --fields-c++=+{properties} --extras=+q -f tags -R
As you're in C, you should use cscope -- I cannot seriously use it in C++.
Note: if you just want to jump from one header file to its implementation file and the other way around, I've forked the plugin alternate.