いやスマンたしかにlongが32 bitとは限らないっぽい
ISO/IEC 14882:2011の"3.9.1 Fundamental types”のやつ:
>There are five standard signed integer types : “signed char”, “short int”, “int”, “long int”, and “long
>long int”. In this list, each type provides at least as much storage as those preceding it in the list.
>There may also be implementation-defined extended signed integer types. The standard and extended signed
>integer types are collectively called signed integer types. Plain ints have the natural size suggested by the
>architecture of the execution environment44; the other signed integer types are provided to meet special
>needs.
(この後にunsignedの記述があるが同様なので略

型のサイズの順序は>>71の通り。

APIをintで規定するかshortやlongを使うかはAPI設計者の気まぐれで決めていいってことらしい

で、APIが決まったら呼び出す側はABIレベルでそれに合わせなければ動かないので
>2.サイズ変わったら困るだろ
という状況は往々にして発生する、