長久手の戦いが行われていた4月8日、羽柴秀長が松ヶ島城を開城させ、城主の滝川雄利は浜田城（三重県四日市市）に移って籠城する。また、森長可の死後に手薄となった東濃では、三河から徳川勢が侵攻し、4月17日には徳川家に居た遠山利景が旧領であった明知城を奪還している。その後、羽柴勢は5月4日から尾張の加賀野井城、奥城、竹ヶ鼻城を囲み、水攻めなどで順次攻略したが、信雄・家康は後詰要請に答えず開城するように勧告し、6月10日に開城している（竹ヶ鼻城の水攻め）。秀吉は6月13日に岐阜城に立ち寄り、6月28日に大坂城に戻った。これを受けて家康も小牧山城を酒井忠次に任せ、清州城に移っている。
岩崎城を占領した池田恒興、森長可に徳川軍出現の報が伝わり、両将は引き返しはじめた。そのころ、家康は富士ヶ根より前山に陣を構えた。右翼に家康自身3,300人、左翼には井伊直政勢3,000人、これに織田信雄勢3,000人。一方、引き返して対峙した恒興・森勢は右翼に恒興の嫡男・池田元助（之助）、次男・池田輝政勢4,000人、左翼に森勢3,000人、後方に恒興勢2,000人が陣取った。4月9日午前10時ごろ、両軍が激突。戦闘は2時間余り続いた。戦況は一進一退の攻防が続いたが、森長可が狙撃されて討死し、徳川軍優勢となった。池田恒興も自勢の立て直しを図ろうとしたが、永井直勝の槍を受けて討死にした。池田元助も安藤直次に討ち取られ、池田輝政は家臣に父・兄は既に戦場を離脱したと説得され、戦場を離脱した。やがて恒興・森勢は潰滅、合戦は徳川軍の勝利に終わり、追撃したのち小幡城に引きあげた。この日の長久手の戦いにおける羽柴軍の死者2500余人、織田徳川軍の死者590余人という。秀吉は9日に陽動として小牧山へ攻撃をしかけている。午後に入って白山林の戦いの敗報が届き、秀吉は2万人の軍勢を率いて戦場近くの竜泉寺に向けて急行した。しかし、500人の本多忠勝勢に行軍を妨害される。夕刻、「家康は小幡城にいる」との報を受け翌朝の攻撃を決める。家康と信雄は夜間に小幡城を出て小牧山城に帰還した。秀吉は翌日この報を聞き、楽田に退いた。
これから使用する定数の名前と対応するデータを明示する。変数はプログラミング言語によっては宣言が不要なものもあるが、定数は値が変えられないため、名前の明示（宣言）と同時にデータを関連づける（代入する）ことになる（初期化または定義）。また、定数も変数同様データ型を指定することもある。言語によってサポート状況や構文は異なるが、定数には大別して「再代入できない変数」と「コンパイル時定数」の2種類がある。前者の代入・初期化には、リテラルのほかに変数を含む任意の式も使用することができる。後者の代入・初期化には、リテラルあるいは同様のコンパイル時定数およびコンパイル時定数式しか使用できない。Pythonなど、動的プログラミング言語の中には定数をサポートしないものもあるが、読み取り専用プロパティで代用することができるものもある。「再代入できない変数」としての定数の値は、プログラム実行時に初期化する際の右辺式の評価結果により決まる。つまり、サブルーチンなどで定数の初期化が何度か実行される場合は、呼び出しのたびに実際のデータが変化することもある。以下のC言語における例では、定数yの初期化に変数を使用しており、仮引数xの値（実引数）によってyの値は実行時に変化する。このyは数学や物理学などにおける定数（数学定数や物理定数など）とは異なり、「再代入できない変数」を表している。double func(double x) {    const double y = x * x;    /* 定数への再代入は不可能 */    /*    y = 0.0;    */    return y;}一方、「コンパイル時定数」としての定数の値は常に静的に定まる。C言語およびC++のconst型修飾子 (type modifier) は文脈によって意味が異なり、再代入できない変数を定義する目的のほか、コンパイル時定数を定義する目的にも使われる。C#のconst修飾子 (modifier) は常にコンパイル時定数の定義に使用される。ただし将来的に変更される可能性のある定数をアセンブリ外部に公開する場合、アセンブリを再コンパイルすることなくバイナリ互換性を維持するには、constの代わりにreadonlyを使用することが推奨されている。const double ConstantValue1 = 0.5;const int ConstantValue2 = (int)(ConstantValue1 * 100.0) + 1; // 51//const double SquareRoot2 = System.Math.Sqrt(2.0); // 不可。C++11規格以降のC++では、コンパイル時定数の定義に使用可能なconstexpr指定子 (specifier) をサポートするようになった。constexpr double ConstantValue1 = 0.5;constexpr int ConstantValue2 = (int)(ConstantValue1 * 100.0) + 1; // 51//constexpr double SquareRoot2 = std::sqrt(2.0); // 不可。const double SquareRoot2 = std::sqrt(2.0); // 可。