Si les deux types n'ont pas le même nom, c'est qu'il y à une raison.
Sur une archi 32, la contenance maximale d'un int est il me semble de 2^32, sur un 64, 2^64 etc etc.
Le long comporte une capacité deux fois supérieure a celle d'un int. En revanche, un long ne peut contenir de décimale, contrairement a un double ou à un float.
En terme de taille, un long équivaut a un double, mais n'a pas le même effet.
Concernant le c++, non, cela ne simplifie pas toujours le code. La compilation séparée te permet de générer des .o, qui te permettent ensuite de compiler ton binaire. Ces .o sont réalisable a partir de .c et de .cpp, ainsi, tu peux coder plus ou moins selon tes besoins. Le C est un des languages les plus "bas niveau", le c++, c'est orienté objet (et non pas objet). La notion de classe et d'héritage te permet de mettre en place un code bien plus lisible que le C. La surcharge de fonction est une bénédiction pour les codeurs, parce que les noms a la toto12343244, ca va bien!
En parlant de classes, ces dérniere te permettent de créer aisemment des méthodes, qui te permettent effectivement de faire du code secure, les notions de constructeur et destructeurs te permettent de mieux gérer ta mémoire. Je n'épiloguerais pas sur les namespace, qui comportent les classes...
PS : Les cours de m@teo sont excellents!