Use the language all day, every day. Usually this means being full-time employed in the language.
Read all you can about the language. Especially, "best practices" and idioms.
Join a users group to talk with others about the language and what they do with it.
Work with other people's code! There is no faster way to learn what not to do in a language than to have to clean up after someone did something awful.
Support the code you write - every bug becomes a tour of your worst decisions!
Study computer science and languages in general.
Learn a very different language. A great compliment to C would be a functional language like Lisp. This will turn the way you think about your procedural language inside out.
Learn to use the frameworks and APIs available for that language.
Take the time to do your own experiments with the language. SICP is not applicable to C, but the attitude of learning a language by testing its limits is a very productive one.
Read the history of the language to learn why it was made the way it is.
Attend conferences to hear the language authors speak, or to hear what industry leaders are doing with the language.
Take a class in the language.
This is a great bit of programming advice I have found on programmers stackexchange and bookmarked. It helped me shape how I code over the years and it still does.