En fait deux lignes max en C++98, C++03 et C a cause d'une règle a la con:
Dans ISO 14882 2003 (Aka C++03), Section 2.1 Paragraphe 2 (t'as la même chose en C++98 et tu l'as en 5.1.1.2p2 dans le
n1548 (draft C12))
[...] If a source file that is not empty does not end in a new-line character, or ends in a new-line character
immediately preceded by a backslash character, the behavior is undefined.
En C++11 n3290 (le FDIS), Section 2.1 Paragraphe 2:
[...] A source file that is not empty and that does not end in a new-line character, or that ends in a new-line
character immediately preceded by a backslash character [...], shall be processed as if an additional new-line
character were appended to the file.
Traduction: En C, C++98 et C++03, un fichier source doit se terminer par une ligne vide... Mais ce n'est plus le cas en
C++11.
Et tu n'as pas besoin de l'#include.
En C++ t'es oblige de faire :
namespace std{ extern "C" int printf(const char*, ...); } int main(){ std::printf("42\n"); }
En C99 (non révisé) ou autres standards C, tu peux faire :
int main(){ printf("42\n"); }
Parce qu'en C quand tu utilises une fonction non déclare, une déclaration implicite qui retourne un int est généré par
le compilateur... comme par hasard c'est ce que retourne printf. (Cette règle a été retire dans les révisions ("Cor") de
C99 et dans le draft n1548)
En tout cas, lors du link avec la lib standard, l'appel a printf sera correctement linke, pas besoin d'#include.