歴史的な事情が色々とあって結果的に複数の呼び出し規約が存在しているとしか言えないのですが重要な理由のひとつとして C には関数原型 (プロトタイプ) のない関数というものがあるというのが関係していると思います。
要は関数の引数の型がわからない状態が存在しえて、それでも正しく呼び出せているなら正しく、間違ってても即座にクラッシュはしないくらいにはフォローできる仕組みが必要だったのです。 そのためには呼出し型でスタックに積んだ実引数の後始末をしたほうが確実です。 呼び出し側は実引数としてスタックに積んだ数 (スタックポインタが動いた量) を知っているのでそれを元に戻す方法も知っています。 これが cdecl です。
しかし、ローカル変数の後始末をするためにもスタックの調整はするのですからそのときに一緒に引数の後始末 (スタックポインタの書換) も出来れば効率は良いです。 引数の内容がきちんとわかっていてズレる心配がないならこちらのほうが好都合です。 これが stdcall です。
通常では C や C++ で書かれたプログラムでは特に指定しなければ cdecl が使われるのでいちいち指定が必要な状況はあまり起こりません。 起こるとしたら、そのプロジェクト内で別の言語を混ぜて使っている (または過去に混ぜていたなごり) という事情が考えられます。
また、 Windows では DLL が外部に公開する関数は stdcall を使う慣例がありますが、静的リンクしていたものを DLL に分離したり、逆に DLL を静的リンクにするなどの変更があったときに混乱してしまったということもありうるでしょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。