Source: http://public.iutenligne.net/informatique/langages/maillefert/LangageC/cours/chapitre_03.pdf