If your normalsize font fits in the default width grid of listings you
can try to decrease colum width. For instance
\lstset{basewidth={0.4em,0.4em}} or less. If it looks ugly, you can
define a macro for your basicstyle default, and add your size. For example
\lstset{basicstyle=\small\mybasicdefault}
You can also define a macro with parameter. For instance:
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\newcommand\mybasicdefault[1]{#1\ttfamily\color{red}}
\lstset{language=C, basicstyle=\mybasicdefault{}}
\begin{document}
\begin{lstlisting}
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char** argv){
printf("hello world!\n");
return 0;
}
\end{lstlisting}
\begin{lstlisting}[basicstyle=\mybasicdefault{\tiny}]
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char** argv){
printf("hello world!\n");
return 0;
}
\end{lstlisting}
\end{document}
You can define a general style. For instance:
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\newcommand\mybasicdefault{\ttfamily\color{red}}
\lstdefinestyle{small}{basicstyle=\small\mybasicdefault}
\lstdefinestyle{footnotesize}{basicstyle=\footnotesize\mybasicdefault}
\lstdefinestyle{scriptsize}{basicstyle=\scriptsize\mybasicdefault}
\lstdefinestyle{tiny}{basicstyle=\tiny\mybasicdefault}
\lstset{language=C, basicstyle=\mybasicdefault{}}
\begin{document}
\begin{lstlisting}
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char** argv){
printf("hello world!\n");
return 0;
}
\end{lstlisting}
\begin{lstlisting}[style=tiny]
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char** argv){
printf("hello world!\n");
return 0;
}
\end{lstlisting}
\end{document}
I'm sure there are some other possible answers!
Jean-Côme Charpentier