Sitemap
Enes Özmert

Enes Özmert

B Programming Language

3 min readApr 6, 2026

Ana Başlıklar ve Özetleri

Introduction

  1. B, Bell Labs’ta Ken Thompson ve Dennis Ritchie tarafından geliştirilmiş.
  2. Özellikle sistem programlama için uygun, typeless bir dil.
  3. B dili, GMAP’a göre daha kolay kod yazmaya izin verir.
  4. Sadece non-numeric işlemler (karakterler, bit manipülasyonu) için tasarlanmıştır.

General Layout of Programs

  1. B programları fonksiyonlardan oluşur.
  2. Her programda bir main() fonksiyonu bulunmalı; program buradan başlar.
  3. Fonksiyonlar bağımsızdır ve argüman alabilir.
  4. Kod blokları {} ile tanımlanır; satır sonu için ; kullanılır.

Compiling and Running B Programs

  1. Kaynak kod metin editörü ile yazılır.
  2. B derleyicisiyle derlenir ve TSS sistemi üzerinde çalıştırılır.
  3. Derleyici hataları: iki harfli kodlar + satır numarası (ör: sx = syntax error).

A Working B Program; Variables

  1. Değişkenler auto ile tanımlanır (lokal).
  2. Tüm değişkenler fonksiyon başında tanımlanmalı.
  3. B typeless’tır → tüm değişkenler 36-bit word olarak kabul edilir.

main() {
auto a, b, sum;
a = 1; b = 2;
sum = a + b;
putnumb(sum);
}

Constants

  1. Floating‑point sabitler destekleniyor (ondalık, exponensli, örn. 1.5e-2)
  2. ASCII karakter sabitleri: 1–4 karakterli 'A', 'abc', 36‑bit word içinde doldurulur
  3. BCD karakter sabitleri: grave accent içinde `a`, 1–6 BCD karakter

Manifest Constants

name = text; ile tanımlanan makro‑benzeri yapılar: derleme sırasında text yerine geçer (10 seviye iç içe)

Arithmetic; Octal Numbers

  1. Sadece integer arithmetic desteklenir.
  2. Operatörler: + - * / %
  3. Octal sayılar: başında 0 olanlar (ör: 0777 = decimal 511).
  4. % operatörü yanında floating‑point aritmetiği de desteklenir

Characters; putchar; Newline

  1. Karakterler tek tırnak içinde: 'A'
  2. Stringler çift tırnak içinde: "Hello"
  3. putchar() fonksiyonu karakter basar.
  4. *n newline’ı temsil eder.

External Variables

  1. extrn anahtar kelimesi ile tanımlanır.
  2. Fonksiyonlar dışında tanımlanan değişkenler globaldir.
  3. Argüman geçişi yapılabilir.
  4. Argümanlar call by value (değer kopyalanır).

put2char(x, y) {
putchar(x);
putchar(y);
}

Input; getchar

  1. getchar() bir karakter okur.
  2. Satır sonuna kadar karakterleri tek tek alır.

Relational Operators

  1. ==, !=, <, >, <=, >=
  2. Mantıksal ifadeler için kullanılırlar.

if; goto; Labels; Comments

  1. if (expr) statement
    else statement2
  2. goto label; atlamalar için.
  3. Yorum: /* comment */

Compound Statements

  1. Birden fazla ifadeyi {} ile grupla.
  2. Tek ifade yerine blok kullanılabilir.

Function Nesting

  1. Fonksiyonlar diğer fonksiyonlara argüman olabilir:

putchar(getchar());

While statement; Assignment within an Expression

  1. While döngüsü:
  2. Atamayı koşul içinde yapabilirsin:

while (expr) statement

while ((c = getchar()) != ‘*n’) putchar(c);

Get Enes Özmert’s stories in your inbox

Join Medium for free to get updates from this writer.

More on Whiles; Null Statement; exit

  1. Sonsuz döngü: while(1) { ... }
  2. exit() fonksiyonu programı sonlandırır.
  3. Null statement: ; (hiçbir şey yapmaz).

Else Clause; Conditional Expressions

  1. if ... else zincirleri.
  2. Kısa koşul: x = (a < b) ? a : b;

Unary Operators

  1. ++, -- prefix/postfix destekli
  2. Ayrıca #- unary float negation gibi ek operatörler mevcuttur

Bit Operators

  1. Bit düzeyinde işlemler: &, |, ~, <<, >>

Örnek: karakterleri bir word’e sıkıştırmak.

Assignment Operators

  1. Kısa atamalar:
  2. Atama = en düşük önceliklidir

x =- 10 /* x = x — 10 */
x =+ 5 /* x = x + 5 */

(Dikkat: boşluklar önemli!)

Addressing

Detaylı: & adres alma, * dizinleme ile dereference; a[b] ⇔ *(a+b)

Vectors

  1. Diziler (vektörler): auto v[10];
  2. Eleman erişimi: v[i]

External Vectors

  1. Global diziler:

extrn v;
v[10] ‘hi!’, 1, 2, 3;

Addressing

  1. & adres alma, * pointer dereference.

x[0] = *x;

Strings

  1. Çift tırnak içinde tanımlanır: "hello"
  2. Son karakter *e ile işaretlenir (EOT).

Return Statement

Fonksiyonlar değer döndürür:

return(y);

Other String Functions

  1. concat(s, a1, a2, ...) → String birleştirme
  2. getstr(s) → Bir satır okuma
  3. putstr(s) → String yazma

Switch Statement; Break

switch(c) {
case ‘a’: action1(); break;
case ‘b’: action2(); break;
default: error();
}

Formatted IO

printf(“%d”, x);
Appendix C’de detaylı.

Lots More on IO

  1. Dosya açma: openr(u, "file");
  2. Yazma: openw(u, "file");
  3. flush() → Çıktıyı temizle.

System Call from TSS

  1. system(“command”);
  2. TSS komutlarını B’den çalıştırır.

Recursion

  1. Fonksiyonlar kendini çağırabilir:
    putnumb(n) {
    if (n/10) putnumb(n/10);
    putchar(n%10 + ‘0’);
    }

Argument Passing for Functions

  1. Argümanlar call by value ile geçer.
  2. Değişiklik yapmak için pointer kullanılır:

flip(&x, &y);

Calling Fortran and GMAP Subroutines

callf() ile diğer dillerdeki fonksiyonları çağırabilirsin.

Compiler Directives

  1. #title, #lbl, #alias, #ttldat, #copyright gibi satır içi direktifler kullanılıyor

Random File I/O, Sequential Streams

  1. .BSET, unit, rastgele erişimli I/O (random file I/O) ve akış yönelimli I/O

******************************************************

Appendix A: Derleyici hata kodları

Appendix B: Escape karakterleri (*n, *t, *e, vb.)

Appendix C: printf rehberi

Appendix D: Operatör öncelikleri tablosu

Appendix E: İçindekiler dizini

--

--