В C и С++ по-умолчанию стек после вызова очищает вызывающий код. Так сделано было для того, чтобы работали функции с переменным числом параметров (ведь только вызывающий код знает, сколько параметров он положил в стек). В Паскале принято, что стек чистит сама вызываемая функция.
В разных ОС могут быть различные соглашения вызовов API, в Windows принят паскалевский вариант, поэтому все функции ядра Windows объявлены с модификатором __stdcall. Соответственно, модификатор __cdecl определяет функции, использующие сишный договор о передаче параметров.