イスラエル国防軍は1950年代にフランスからAMX-13軽戦車の105mm自走砲型であるMle.61 105mm自走榴弾砲を輸入し第二次中東戦争で運用し、1960年代にはフランスから同じく105mm砲装備のM7プリースト自走砲を輸入して実戦配備していた。しかし、105mm砲では射的距離が十分でないという事で当時牽引式野砲として導入していたフランス製M50 155mm榴弾砲を自走砲化することとなった。車体には主力戦車として豊富な運用経験があり、またセンチュリオン (ショット) やM48パットン (マガフ) の導入開始により今後の余剰化が考えられたスーパーシャーマンが使用された。砲の搭載にあたっては、本家アメリカ合衆国製のM4中戦車/M3中戦車系の自走砲型であるM12 155mm自走カノン砲・M40 155mm自走カノン砲と同じように、エンジンコンポーネントを車体前方右舷側～中央部に移動させ、車体後部をオープントップの戦闘室 (砲搭載部および兵員用の作業スペース) とする改造が行われている。戦闘室は長方形の鋼板を組み合わせたような、非常にシンプルな形状のものである。戦闘室には155mm砲弾47発を搭載可能で、副武装として12.7mm M2重機関銃あるいはM1919 7.62mm機関銃を装備可能である。また、おそらくスペースを確保する都合からであろうか、各タイプ保有されていたスーパーシャーマンの中で、M50自走砲の車体に転用されたのは他のタイプに比べて車体の長いM4A4車体であった。最初に製造されたM50 155mm自走榴弾砲は初期型スーパーシャーマンと同じく、第二次世界大戦中のM4中戦車に装備されていたVVSSサスペンション、T54E1型全金属製履帯、M4/M4A1系のコンチネンタル製ガソリンエンジンが搭載された。コンチネンタルガソリンエンジン搭載型M4やM4A1の車体下部リアパネルに装着されているエアクリーナーは、M50自走砲では戦闘室前面に装着されている。第三次中東戦争後の1968年以降、これらのM50に対して戦車型のスーパーシャーマンと同様に、カミンズ製ディーゼルエンジンへの換装、HVSSサスペンションおよび幅広のT80型全金属製履帯への換装が行われている。エンジン換装型では車体前面装甲部に大型のグリルが増設されるなど、車体周りには大幅な改造が行われている。カミンズディーゼルエンジン型のM50は1973年の第四次中東戦争で実戦投入された。その後、密閉戦闘室を持ったソルタムL33 155mm自走榴弾砲が量産配備されたことや、アメリカからより新型のM109 155mm自走榴弾砲、M107 175mm自走カノン砲を導入したことによりM50自走砲は第一線装備から外れ、1990年代には退役したとみられている。余剰化したM50自走砲の車体の一部は、後部戦闘室を救護室に改造したシャーマン装甲救急車（アンビュタンク）に改造されて使用された。現在、イスラエル国内のラトルン戦車博物館およびイスラエル砲兵隊博物館に実車が展示されている。
C言語およびC++のローカル変数は、関数内の同じ「ブロック」という領域内からのみ参照可能な変数である。C99よりも前の規格ではブロックの先頭部分でのみ定義可能だったが、C99からはC++同様に任意の位置で定義可能である。ある関数fにおけるローカル変数aのスコープ (scope) すなわち可視性は、その関数f内において、その変数aが宣言された場所から、その変数aが定義されたブロックを抜けるまでである。スコープ外からは参照することができない。ローカル変数aを定義したブロック内で別の関数gを呼び出すと、関数gからはその変数aが見えなくなるが、メモリ上には依然として存在しており、関数gが終了して関数fに戻り、変数aのスコープに入ると再び見えるようになる。下記の例において、2行目で宣言されているローカル変数iのスコープは2行目から6行目の中括弧までであり、4行目で宣言されているローカル変数jのスコープは4行目から5行目の中括弧までである。1 void Function() {2     int i = 1; /* スコープの広いローカル変数 */3     {4         int j = 1; /* スコープの狭いローカル変数 */5     }6 }C言語のローカル変数の寿命 (lifetime) は、デフォルトではそのローカル変数を定義したブロックを抜けるまでである。ローカル変数は宣言により自動的にメモリ割り当てが行なわれるが、ブロックを抜けて寿命が尽きると自動的にメモリ割り当てが解除される。また、ローカル変数が定義された関数の制御フローが呼び出し元に返り、コールスタック領域が解放されると、そのローカル変数のメモリ領域は自動的に解放される。したがって「自動変数」とも呼ばれる。未初期化の自動変数の内容は不定 (indeterminate) である。ローカル変数宣言にstaticキーワード（静的記憶クラス指定子）を付加すると、「静的ローカル変数」となり、変数寿命はプログラムの生存期間と同一となる。C言語では静的ローカル変数はグローバル変数と同じくプログラム開始処理以前に一度だけ初期化されるが、C++では制御フローが静的ローカル変数の定義箇所に到達した際にその初期化式が一度だけ評価され、その値によって変数は一度だけ初期化される。C99の例を示す。なお、(1)はC言語およびC++03規格までのC++ではauto int a = 0;と等価だが、C++11以降はautoキーワードの意味が変更されたため、等価ではなくなった。#include <stdio.h>int Function1(void) {    int a = 0; // (1) 通常のローカル変数（自動変数）の宣言と定義。初期化は関数を呼び出すたびに毎回行なわれる。    a += 1;    return a;}int Function2(void) {    static int s = 0; // (2) 静的ローカル変数の宣言と定義。初期化は一度だけ行なわれる。    s += 1;    return s;}int main(void) {    for (int i = 0; i < 5; ++i) {        printf("auto(%d) = %d\n", i, Function1());        printf("static(%d) = %d\n", i, Function2());    }    return 0;}以下のコードはC++ではコンパイル可能だが、C言語では静的ローカル変数はコンパイル時定数で初期化されなければならないため、コンパイル不可能である。#include <stdio.h>int Func(int x) {    if (x > 0) {        static int firstPositive = x;        return firstPositive;    } else if (x < 0) {        static int firstNegative = x;        return firstNegative;    }    return 0;}int main(void) {    printf("%d\n", Func(1)); // 1    printf("%d\n", Func(5)); // 1    printf("%d\n", Func(-5)); // -5    printf("%d\n", Func(-1)); // -5    printf("%d\n", Func(0)); // 0    return 0;}C++ではSingleton パターンの実現に静的ローカル変数が利用されることがある。また、C++ではローカル変数の寿命が尽きるときにデストラクタが呼ばれる。この性質を利用したデザインパターンがRAIIである。