Here's yet another solution using tcolorbox (version 3.02)
.
The first variant is breakable and uses the full line width:
\documentclass{article}
\usepackage{xcolor}
\usepackage[skins,listings,breakable]{tcolorbox}
\begin{document}
\begin{tcblisting}{breakable,listing only,
listing options={language=c,aboveskip=0pt,belowskip=0pt},
size=fbox,boxrule=0pt,frame hidden,arc=0pt,colback=lightgray}
#include <stdio.h>
int main(int argc, char ** argv)
{
printf("Hello world!\n");
return 0;
}
\end{tcblisting}
\end{document}

The second variant is not breakable, but the gray background adapts to the code width:
\documentclass{article}
\usepackage{xcolor}
\usepackage[skins,listings,breakable]{tcolorbox}
\begin{document}
\begin{tcblisting}{hbox,listing only,
listing options={language=c,aboveskip=0pt,belowskip=0pt},
size=fbox,boxrule=0pt,frame hidden,arc=0pt,colback=lightgray}
#include <stdio.h>
int main(int argc, char ** argv)
{
printf("Hello world!\n");
return 0;
}
\end{tcblisting}
\end{document}
