C (programovací jazyk)

C
Paradigmaimperativní (procedurální), strukturovaný
Vznik1972
AutorDennis Ritchie
VývojářDennis Ritchie & Bell Labs
Poslední verzeC18 (červen 2018[1])
Poslední nestabilní verzeC23 (N3096) (2. dubna 2023; před 640 dny[2])
Typová kontrolastatická, slabá, nominativní
Hlavní implementaceclang, GCC, Intel C, MSVC, Pelles C, Watcom C
DialektyCyclone, Unified Parallel C, Split-C, Cilk, C*
Ovlivněn jazykyB (BCPL, CPL), ALGOL 68, Assembler, PL/1, Fortran
Ovlivnil jazykyAMPL, AWK, csh, C++, C--, C♯, Objective-C, BitC, D, Go, Java, JavaScript, Limbo, LPC, Perl, PHP, Pike, Processing, Rust, Seed7 a řadu dalších
OSmultiplatformní
Ken Thompson a Dennis Ritchie

C je programovací jazyk, který počátkem 70. let 20. století vyvinuli Ken ThompsonDennis Ritchie pro potřeby operačního systému Unix. Jde o vyšší programovací jazyk, který přesto umožňuje zapisovat programové konstrukce tak, jak je počítač skutečně zpracovává, takže výsledný kód může být velmi efektivní, a proto v minulosti nahradil nízkoúrovňový jazyk symbolických adres. Jazyk C je kompilovaný, imperativní (procedurální), strukturovaný, podporuje rekurzi, má statickou typovou kontrolu. Je využíván pro programování operačního systému a aplikačního softwaru od superpočítačů k PLC (programovatelný logický automat) a vestavěných systémů (anglicky „embedded systems“[3], nachází se např. v automobilech nebo zdravotnických přístrojích)[4].

Jazyk C je nástupcem programovacího jazyka B. Vyvinul ho Dennis Ritchie v Bellových laboratořích mezi roky 1972 a 1973 pro vývoj nástrojů pro operační systém Unix. K vývoji přispěl Ken Thompson, který ho použil pro naprogramování jádra operačního systému Unix, aby dosáhl možnosti ho přenést na různé počítače. V 80. letech se stal nejpopulárnějším programovacím jazykem, který měl překladače pro téměř všechny dostupné počítačové architektury.[zdroj?] V roce 1989 byl jazyk C standardizován ANSI (jako ANSI C) a ISO.

Charakteristika

V současné době[kdy?] je jeden z nejpopulárnějších jazyků, zřejmě nejčastější pro psaní systémového softwaru, ale velmi rozšířený i pro aplikace. C je nízkoúrovňový, kompilovaný, relativně minimalistický programovací jazyk. Je dostatečně mocný na většinu systémového programování (ovladačejádro OS), přičemž zbytek lze dořešit tzv. inline assemblerem, tedy metodou zápisu assembleru přímo do kódu. Zdrojový kód C je přitom mnohem čitelnější než assembler, je jednodušší ho zapsat a navíc je daleko snáze přenositelný na jiné procesory a počítačové architektury. Proto jsou často operační systémy, překladače, knihovnyinterprety vysokoúrovňových jazyků implementovány právě v C.[zdroj?] Mnoho dalších moderních programovacích jazyků přebírá způsob zápisu (neboli syntaxi) z jazyka C, například C++, D, Java, Perl, PHP, Rust, JavaScript.

Ukládání dat je v C řešeno třemi základními způsoby: statickou alokací paměti (při překladu), automatickou alokací paměti na zásobníku a dynamickou alokací na haldě (heap) pomocí knihovních funkcí. Jazyk disponuje jen minimální abstrakcí nad alokací: s pamětí se pracuje přes datový typ zvaný ukazatel, který drží odkaz na paměťový prostor daného typu proměnné, ale je na něm možné provádět aritmetické operace (tyto operace ale neoperují s ukazateli přímo na úrovni jednotlivých bajtů, nýbrž přihlíží k velikosti datového typu, na který ukazují – existují ale také ukazatele typu void *, které mohou odkazovat na jakýkoliv typ dat uložený v paměti.). Ukazatele tedy existují nezávisle na proměnných, na které odkazují, a je na odpovědnosti programátora, aby neukazovaly na paměť nealokovanou.

Ukazatele jsou velmi mocným nástrojem, protože C jazyk povoluje ukazatele nejen na data, ale i na funkce. Současně jsou ukazatele z hlediska přenositelnosti a rizika zhroucení programu při jejich nesprávném použití Achillovou patou jazyka. Na druhou stranu programátor má plnou zodpovědnost za alokaci paměti, není zde tedy závislost na automatickém dealokátoru paměti (garbage collector). Jazyky JavaC♯, oba odvozené od C, používají méně univerzální způsob odkazování alokovaných proměnných, který snižuje pravděpodobnost chyby v programu. Jazyk C++, původně rozšíření jazyka C, ovšem zodpovědnost programátora za alokaci zachoval (s výjimkou norem C++11 a vyšších, kde je to možnost volby).

Skutečnost, že jazyk C neklade programátorovi téměř žádné překážky při zápisu do paměti, vedla v praxi k řadě bezpečnostních slabin v programech napsaných v jazyce C (přetečení bufferů, výkon libovolného kódu, rozbití zásobníku). Významným příkladem je například slabina Heartbleed zavlečená do knihovny OpenSSL, která byla odhalena až po více než dvou letech. Současný hardware se některým těmto slabinám snaží bránit, například pomocí NX bitů, které označují určitou oblast paměti jako nevykonatelnou. Jeden z následovníků jazyka C, jazyk Rust, má právě z tohoto důvodu velmi silný bezpečnostní model práce s pamětí.

Historie

Počátky

Vývoj jazyka C začal v Bellových laboratořích AT&T mezi léty 19691973. Ritchie tvrdí, že nejpřínosnější období bylo v roce 1972.[zdroj?] Pojmenování „C“ zvolili, protože mnoho vlastností přebírali ze staršího jazyka zvaného „B“, jehož název byl zase odvozen od jazyka BCPL (ale to není jisté, neboť Thompson také vytvořil jazyk Bon na poctu své ženy Bonnie).

V roce 1973 se stal jazyk C dostatečně stabilním. Většina zdrojového kódu jádra Unixu, původně napsaného v assembleru PDP-11, byla přepsána do C. Unix tedy patří mezi první operační systémy, které byly napsané v jiném než strojovém jazyce či assembleru. Předchozí byl například systém Multics (napsaný v PL/I) a TRIPOS (napsaný v BCPL).

K&R C

V roce 1978, Ritchie a Brian Kernighan vydali první vydání knihy The C Programming Language. Tato kniha, mezi programátory C známá jako „K&R“, sloužila po mnoho let jako neformální specifikace jazyka. Verze C, kterou takto popsali, bývá označována jako „K&R C“. (Druhé vydání knihy popisovalo novější standard ANSI C.)

K&R zavedli následující vlastnosti jazyka:

  • datový typ struct
  • datový typ long int
  • datový typ unsigned int
  • Operátor =+ byl změněn na +=, a podobně (=+ mátl lexikální analyzátor překladače C).

K&R C je považován za základní normu, kterou musejí obsahovat všechny překladače jazyka C. Ještě mnoho let po uvedení ANSI C to byl „nejmenší společný jmenovatel“, který využívali programátoři v jazyce C kvůli maximální přenositelnosti, protože zdaleka ne všechny překladače plně podporovaly ANSI C.

V několika letech následujících po uvedení K&R C bylo uvedeno a přidáno několik „neoficiálních“ vlastností jazyka, které byly podporovány překladači od AT&T a některých dalších dodavatelů. Změny zahrnují:

  • datový typ void * a funkce vracející void
  • funkce vracející typ struct nebo union
  • položky ve struct se ukládají do odděleného jmenného prostoru pro každý struct
  • modifikátor const
  • standardní knihovnu zahrnující většinu funkcí implementovaných různými dodavateli
  • výčtový typ enumeration
  • datový typ float

ANSI C a ISO C

V pozdních sedmdesátých letech začalo C nahrazovat BASIC jako přední programovací jazyk pro mikropočítače. Během osmdesátých let bylo přejato pro použití na platformě IBM PC a jeho popularita se značně zvýšila. Tou dobou Bjarne Stroustrup a další v Bellových laboratořích začali pracovat na rozšiřování C o objektově orientované prvky. Jazyk, který vytvořili, zvaný C++, je dnes nejrozšířenější programovací jazyk pro aplikace na Microsoft Windows; C zůstává stále populárnější ve světě Unixu.

V roce 1983 se American National Standards Institute (ANSI) dohodla na sestavení komise X3J11, aby vytvořila standardní specifikaci C. Po dlouhém a pracném procesu byl standard dokončen v roce 1989 a schválen jako ANSI X3.159-1989 „Programming Language C“. Tato verze jazyka je často stále označována jako ANSI C. V roce 1990 byl standard ANSI C (s drobnými změnami) adoptován institucí International Organization for Standardization (ISO) jako „ISO 9899|ISO/IEC 9899:1990“.

Jedním z cílů standardizačního procesu ANSI C byl vytvořit nadmnožinu K&R C zahrnující mnoho „neoficiálních vlastností“. Navíc standardizační komise přidala několik vlastností jako funkční prototypy (vypůjčené z C++) a schopnější preprocesor.

ANSI C je dnes podporováno téměř všemi rozšířenými překladači. Většina kódu psaného v současné době v C je založena na ANSI C. Jakýkoli program napsaný pouze ve standardním C je přeložitelný a spustitelný na jakékoli platformě, která odpovídá tomuto standardu. Nicméně mnoho programů se dá přeložit pouze na jedné platformě nebo jedním překladačem, kvůli použití nestandardních knihoven, např. pro grafiku, a také některé překladače v implicitním módu neodpovídají standardu ANSI C.

C99

Po standardizaci jazyka v roce 1989 se většina vývoje soustředila na jazyk C++. Přesto však na konci 90. let došlo k vydání dokumentu ISO 9899:1999 (obvykle nazývaný C99), který byl následně v březnu 2000 přijat i jako ANSI standard.

C99 představil několik nových vlastností, které byly mnohdy v překladačích už implementovány jako rozšíření:

  • Inline funkce
  • Proměnné mohou být deklarovány kdekoli (jako v C++), v C89 mohly být deklarovány pouze na začátku bloku
  • Několik nových datových typů, včetně long long int (nejméně 64bitový integer), bool (logický ano/ne typ) nebo typ complex určený na reprezentaci komplexních čísel.
  • Pole s nekonstantní velikostí
  • Podpora pro zakomentování jednoho řádku //, tak jako v jazycích C++ nebo BCPL
  • Nové knihovní funkce, hlavně ve formě náhrady za funkce náchylné na přetečení na zásobníku, např. snprintf()
  • Nové hlavičkové soubory, např. stdint.h
  • Variadická makra (makra C preprocesoru s proměnným počtem argumentů)
  • Klíčové slovo restrict, které v deklaraci ukazatele specifikuje, že na paměť odkazovanou tímto ukazatelem nepřistupuje žádný jiný ukazatel (např. int* restrict foo;), díky čemuž překladač může produkovat optimalizovanější kód; zajištění, aby tomu skutečně tak bylo, je na programátorovi (při nedodržení je chování programu nedefinované)

Standard C99 je v některých ohledech přísnější než původní standard C89; například je (až na výjimky) zakázáno přistupovat k paměti prostřednictvím ukazatele jiného typu, než pomocí jakého byla zapsána. Toto omezení poskytuje překladači prostor k lepší optimalizaci, ale může způsobit problémy s kompilací starších programů.

Žádný kompilátor zatím neobsahuje kompletní implementaci C99, přestože některé jsou poměrně blízko (GCC). Firmy jako Microsoft nebo Borland neprojevily velký zájem o implementaci C99, především kvůli tomu, že většinu nových vlastností poskytuje C++ a to často nekompatibilně s C99 (datový typ complex v C99 versus třída complex v C++).

„Hello, World!“ v C

Následující jednoduchá aplikace vypíše „Hello, World!“ na standardní výstup (většinou obrazovku, ale může to být i do souboru nebo na jiné hardwarové zařízení nebo dokonce i bit bucket, což závisí na nastavení standardního výstupu v době spuštění programu). Jedna z verzí se poprvé objevila v K&R.

#include <stdio.h>

int main(void)
{
    printf("Hello, World!\n"); // tisk na obrazovku
    return 0; // konec programu, bez chyby
}

Charakteristika jazyka C

Datové typy

Programovací jazyk C má tyto datové typy:

  • char – Používá se pro malá čísla; též unsigned char pro bezznaménková čísla a 8bitové znaky
  • int – Používá se pro menší celá čísla; též unsigned int pro bezznaménková čísla
  • long – Používá se pro větší celá čísla; též unsigned long pro bezznaménková čísla
  • float – Používá se pro desetinné číslo s plovoucí řádovou čárkou
  • double – Používá se pro desetinné číslo s plovoucí řádovou čárkou s dvojnásobnou přesností
  • void – Používá se, pokud nepotřebujeme žádnou hodnotu (např. u funkcí)

Řídící příkazy

Řídící příkazy určují průběh zpracovávání programu. Jako takové tvoří páteř programů.

if

Příkaz if je jedním z příkazů jazyka C pro větvení programu (někdy nazývané také jako podmíněné příkazy). Jeho činnost je určena výsledkem testu podmínky, která je vyhodnocena jako pravdivá, nebo nepravdivá. Jednoduše řečeno, podmíněné činí rozhodnutí na základě vyhodnocení nějaké podmínky.

if (výraz)
	příkaz;

příklad:

/* Když je hodnota proměnné i rovna jedna, provede se vypsání textu. */
if (i==1)
    printf("\nHodnota promenne 'i' je jedna.");

if – else

K příkazu if můžete přidat else. Pokud tak učiníte, tak programu řeknete, co má dělat, i pokud bude podmínka nepravdivá. Konstrukce poté může vypadat takto:

if (výraz)
	příkaz1;
else
	příkaz2;

1. příklad:

/* Podle velikosti promenne j se provede prikaz vypisujici informace o jeji hodnote. */
if (j<3)
    printf("\nHodnota promenne j je mensi nez tri.");
else
    printf("\nHodnota promenne j je vetsi nebo rovna trem.");

2. příklad:

# include<stdio.h>

/* Program, který ze tří celých čísel vybere největší. */

int nej(int a, int b, int c)
{
  int vysl;
  if (a>b)
  {
    if (a>c)
      vysl = a;
    else
      vysl = c;
  }
  else
  {
    if (b>c)
      vysl = b;
    else
      vysl = c;
  }
  return(vysl);
}

int main()
{
  int a;
  int b;
  int c;
  printf("Tento program vyhodnoti nejvyssi ze tri zadanych cisel.\n");
  printf("Zadej prvni cislo:");
  scanf("%d", &a);
  printf("Zadej druhe cislo:");
  scanf("%d", &b);
  printf("Zadej treti cislo:");
  scanf("%d", &c);
  printf("Nejvetsi cislo je: %d\n", nej(a,b,c));
  return(0);
}

Vývojový diagram k příkladu:
Vývojový diagram programu

switch

Příkaz switch slouží k výběru jedné z několika větví programu, která se má provést v závislosti na nějaké celočíselné hodnotě. Jeho formát je následující:

switch (celočíselný výraz)
{
	case hodnota1:
		příkazy1;
		break;
	case hodnota2:
		příkazy2;
		break;
	
	default:
		příkazy pro všechny ostatní případy;
		break;
}

Podle hodnoty celočíselného výrazu se vybere jedna z větví case. Je-li hodnota výrazu rovna hodnotě1, provedou se příkazy1, je-li rovna hodnotě2, provedou se příkazy2, atd. Příkaz break na konci každé větve není povinný, ale pokud tam není, začne se po skončení větve provádět další větev v pořadí bez ohledu na hodnotu výrazu. Chceme-li tedy pro každou hodnotu provádět jedinou větev, je break nutný na konci každé větve kromě poslední. Větev default (je-li přítomna) se vykoná v případě, že hodnota výrazu není rovna ani jedné z hodnot uvedených za příkazy case. Obvykle se uvádí jako poslední, není to však vyžadováno.

Příklad

# define CZ 1
# define EN 2
# define DE 3
int jazyk;

/* V zavislosti na hodnote promenne 'jazyk' se vypise pozdrav v ruznych jazycich. */
switch ( jazyk )
{
    case CZ:
        printf("\nNazdar svete!");
        break;
    case EN:
        printf("\nHello world!");
        break;
    case DE:
        printf("\nHallo Welt!");
        break;
    default:
        /* Kdyz nezname jazyk, vypiseme text anglicky */
        printf("\n(Language unknown => english).");
        printf("\nHello world!");
        break;
}

goto

Příkaz goto způsobí okamžitý skok na stejně pojmenované návěští (label):

Příklad

for (i = 0; i < number; ++i) 
{ 
    test += i; goto vypis; 
} 
vypis: 
if (test > 5) 
{ 
    printf("Test > 5"); 
}

V dnešních C programech se goto používá jen málokdy, neboť jeho použití znesnadňuje analýzu chování programu. Za "škodlivý" (harmful) označil příkaz goto nizozemský teoretik Edgar Dijkstra už roku 1968 (Go To Statement Considered Harmful), kdy ještě jazyk C ani neexistoval. (Příkaz goto byl do jazyka C převzat ze starších jazyků.) V určitých situacích však jde o nejpraktičtější řešení vzniklé situace, například při nutnosti opustit několikanásobně vnořený cyklus.

Cyklus for

Příkaz cyklu for je jedním ze tří příkazů cyklu v jazyku C. Umožňuje opakovat jeden, nebo více příkazů. Cyklus for je mnohými programátory v jazyku C považován za jeho nejpružnější příkaz. Cyklus for se používá pro zadaný počet opakování příkazu, nebo bloku příkazu. Jeho obecný formát pro opakování jednoho příkazu vypadá takto:

for (inicializace; test podmínky; inkrementace)
	příkaz;

Příklad:

/* Vypis druhych a tretich mocnin cisel 1 az 10 */
int i;



/* – cyklus je zahajen s hodnotou i = 1,
 * – po provedeni tela cyklu se hodnota i zvysi o 1 (prikaz 'i++'), 
 * – dokud je i mensi nebo rovno 10 dochazi k opakovanemu provadeni tela cyklu a prikazu 'i++'
 * – po provedeni cyklu s hodnotou i rovnou 10 se i zvysi na 11 (prikaz 'i++'), podminka i<=10
 *   se vyhodnoti jako nepravdiva a program pokracuje prikazy nasledujicimi za telem cyklu.
 */
for ( i=1; i<=10; i++ )
{
    printf("\nDruha mocnina cisla %d je %d.", i, i*i );
    printf("\nTreti mocnina cisla %d je %d.", i, i*i*i );
}

Cyklus while

Cyklus while je cyklus s podmínkou na začátku. Napřed se testuje podmínka, je-li platná, pak se provede tělo cyklu a znovu se testuje podmínka. Není-li platná, program pokračuje za cyklem. Není-li tedy podmínka platná při prvním příchodu na cyklus, neprovede se cyklus ani jednou. Jeho formát vypadá takto:

while (test podmínky)
	příkaz;

Příklad:

/* Vypis druhych a tretich mocnin od 1 do 10. */
int i;



i = 1;
while (i <= 10)
{
    printf("\nDruha mocnina cisla %d je %d.", i, i*i);
    printf("\nTreti mocnina cisla %d je %d.", i, i*i*i);
    i++;
}

Cyklus do-while

Cyklus do-while je cyklus s podmínkou na konci. Napřed se provede tělo cyklu, pak se testuje podmínka. Je-li platná, cyklus se provede znovu. Není-li platná, program pokračuje za cyklem. Tento cyklus se tedy provede vždy nejméně jednou. Jeho formát vypadá takto:

do
	příkaz;
while (test podmínky);

Příkazy break a continue

Příkaz break slouží k okamžitému opuštění cyklu, bez ohledu na platnost podmínky. Příkaz continue slouží ke skoku na konec cyklu a znovu testování podmínky (v cyklu for skočí na inkrementaci, pak se znovu testuje podmínka, v cyklech while a do-while skočí na test podmínky). Jejich syntaxe je jednoduchá:

break;
continue;

Příklad:

/* Cyklus while(1) by byl normalne nekonecny, ale je ukoncen podminenym provedenim prikazu break. */
int i;

i=1;
while(1)
{
  printf("\n%d na druhou je %d.", i, i*i );
  i++;
  if( i > 10 )
  {
    printf( "\nHodnota i je %d, padla.", i );
    break;
  }
}

Knihovny

Programovací jazyk C používá knihovny jako základní metody vylepšení. Knihovny v jazyce C jsou skupiny funkcí uložené v jedné archivní složce. Každá knihovna má typicky záhlaví obsahující prototypy o funkcích obsažených v knihovně, které mohou být využity programem, deklarace speciálních datových typů a makro symbolů použité v těchto funkcích. Aby program mohl používat tyto knihovny, musí obsahovat knihovnu v záhlaví a program musí znát danou knihovnu. Nejčastější knihovnou jazyka C je standardní knihovna C, která je specifikovaná standardy ISO a ANSI C a používá se při každé implementaci (implementace, která se zaměřuje na omezené prostředí, jako třeba vložené systémy, může poskytnout pouze část standardní knihovny). Tato knihovna podporuje proud vstupů a výstupů, přidělení paměti, matematické výpočty, řetězce znaků a časové údaje. Několik samostatných standardních záhlaví (například stdio.h) specifikuje rozhraní pro tyto a jiné zařízení standardní knihovny.

Dalším běžným souborem funkcí C knihoven jsou soubory používané pro aplikace speciálně určené pro Unix a podobné systémy, hlavně funkce, které poskytují rozhraní pro kernel. Tyto funkce jsou popsané v několika standardech jako jsou POSIX a jednotná UNIX specifikace.

Vzhledem k tomu, že je v jazyku C napsáno mnoho programů, existuje řada dalších knihoven. Knihovny jsou často psány v jazyku C, protože C kompilery generují efektivní objektový kód. Programátoři poté vytvářejí rozhraní pro knihovnu, aby se daly používat postupy z výše-úrovňových jazyků jako je Java nebo Python.

Práce se soubory a datový proud

Soubor vstup a výstup není součástí jazyka C, ale součásti knihovny stdio.h. Práce se soubory je často implementována pomocí vysoko-úrovňové I/O, které funguje přes datový proud. Datový proud je datový tok nezávislý na zařízení, zatímco soubor je konkrétní zařízení. Vysoko-úrovňové I/O je spojení datového proudu a souboru. V základní knihovně jazyka C je vyrovnávací paměť, která je dočasně použita na ukládání dat předtím, než se odešlou do konečné stanice. Toto zmírňuje čekání na pomalejší zařízení, např. pevný disk nebo SSD disk. Nízkoúrovňové I/O funkce nejsou součástí standardních knihoven jazyka C.

Příbuzné jazyky

Jazyky C++Objective-C vznikly jako odpověď na vlnu popularity objektově orientovaného programování (OOP) v 80. letech 20. století. Obě tato rozšíření jazyka C byla nejprve implementována ve formě preprocesoru, tedy zdrojový kód byl nejprve přeložen do C a poté zkompilován kompilátorem jazyka C. Kromě toho vzniklo velké množství jazyků, které sice s jazykem C nejsou příbuzné, ale které částečně přejaly syntaxi jazyka (Java, C♯, D) nebo dokonce jména některých knihovních funkcí (PHP).

C++

Jazyk C++ je odvozen z jazyka C, není s ním ale úplně kompatibilní. Rozdíl, který způsobuje nejvíce problémů s kompilací je způsoben tím, že C++ definuje mnohem striktnější pravidla pro přetypování datových typů. Kromě OOP implementuje C++ také genericképrocedurální programování.

Objective-C

Objective-C je odvozen z jazyků C a Smalltalk, přičemž s C je úplně kompatibilní (tedy je možné zkompilovat libovolný zdrojový text s překladačem Objective-C). Syntaxe týkající se preprocesoru, výrazů, deklarací funkcí a volání funkcí je odvozena z C, zatímco objektově orientované programování je odvozeno z jazyka Smalltalk.

Reference

V tomto článku byl použit překlad textu z článku C (programming language) na anglické Wikipedii.

  1. The Standard - C
  2. ISO/IEC JTC1/SC22/WG14. C - Project status and milestones [online]. 5 April 2023 [cit. 2023-08-09]. Dostupné online. 
  3. Co je vestavěný systém a jak funguje?. www.voxcafe.cz [online]. [cit. 2024-12-02]. Dostupné online. 
  4. What is an Embedded System? | Definition from TechTarget. Search IoT [online]. [cit. 2024-12-02]. Dostupné online. (anglicky) 

Související články

Literatura

Externí odkazy

V tomto článku byl použit překlad textu z článku C (programming language) na anglické Wikipedii.

Read other articles:

Restaurant in Seattle, Washington, U.S. Pike Place Chinese CuisineThe restaurant in 2022Restaurant informationFood typeChineseCitySeattleCountyKingStateWashingtonCountryUnited StatesCoordinates47°36′33″N 122°20′30″W / 47.60917°N 122.34167°W / 47.60917; -122.34167 Pike Place Chinese Cuisine is a Chinese restaurant at Seattle's Pike Place Market, in the U.S. state of Washington. Description The Chinese restaurant Pike Place Chinese Cuisine is located on the m...

 

Vera Atseva Información personalNacimiento 24 de noviembre de 1919 Oreovec (Macedonia del Norte) Fallecimiento 10 de noviembre de 2006 (86 años)Skopie (Macedonia del Norte) Información profesionalOcupación Política y comisaria política Cargos ocupados DiputadoMinistro de AgriculturaMayor of the City of Skopje (1948) Conflictos Segunda Guerra Mundial Partido político Liga de Comunistas de Yugoslavia Miembro de Consejo Antifascista de Liberación Nacional de YugoslaviaAsamblea de Ma...

 

Contre-la-montre par équipes masculin aux championnats du monde de cyclisme sur route 2017 GénéralitésCourse6e Championnat du monde masculin du contre-la-montre par équipes de marquesCompétitionChampionnats du monde de cyclisme sur route 2017 CMDate17 septembre 2017Distance42,5 kmPays NorvègeLieu de départRavnangerLieu d'arrivéeBergenÉquipes17Vitesse moyenne53,31 km/hRésultatsVainqueur Team SunwebDeuxième BMC Racing TeamTroisième Sky ◀20162018▶Documentation Le contr...

Sekolah Teknik Elektro dan InformatikaInstitut Teknologi BandungJenisPerguruan Tinggi Negeri Badan HukumDidirikan1 Januari 2006 DekanDr. Tutun Juhana, S.T., M.T.LokasiBandung, Jawa Barat, IndonesiaKampusUrbanAlamatGedung Achmad Bakrie, Lt. 2Jl. Ganesha No. 10Bandung 40132Nama julukanSTEI ITBSitus webstei.itb.ac.id Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung (disingkat STEI ITB) adalah salah satu nama sekolah (organisasi setara fakultas) di ITB yang dipimpin oleh seorang ...

 

Câu lạc bộ bóng đá ở AnhBài này viết về câu lạc bộ bóng đá nam. Đối với đội nữ, xem Brighton & Hove Albion W.F.C.Brighton & Hove AlbionTên đầy đủBrighton & Hove Albion Football ClubBiệt danhThe Seagulls, AlbionThành lập24 tháng 6 năm 1901; 122 năm trước (1901-06-24)SânSân vận động FalmerSức chứa31.800[1]Chủ tịch điều hànhTony BloomNgười quản lýRoberto De ZerbiGiải đấuGiải ...

 

Lamb Inn and Theatre EastbourneThe Lamb Inn, EastbourneLamb Inn and TheatreAddress36 High StreetEastbourne United KingdomCoordinates50°46′21″N 0°16′00″E / 50.772611°N 0.266799°E / 50.772611; 0.266799DesignationGrade II ListedTypefringe theatreCapacity80Opened2009Websitehttp://thelamb.eu/ www.thelambtheatre.co.uk The Lamb Theatre is a fringe theatre, situated above the Lamb Inn in Old Town, Eastbourne. The first pub theatre in Eastbourne, it hosts a ran...

Indonesian astronomer Premana PremadiPremadi in 2019Born (1964-07-13) 13 July 1964 (age 59)Surabaya, East Java, IndonesiaAlma materBandung Institute of TechnologyUniversity of Texas at AustinScientific careerFieldsAstronomyastrophysicsInstitutionsBandung Institute of TechnologyBosscha ObservatoryThesisThe study of light propagation in inhomogeneous universes using the gravitational lensing method (1996)Doctoral advisorRichard Matzner Premana Wardayanti Premadi (born 13 July 196...

 

1968 killing of mutinous Philippine Moro soldiers See also: Moro insurgency in the Philippines Recreation of the Jabidah unit patch as described by Benigno Aquino Jr. in a privilege speech delivered at the Legislative Building, Manila, on March 28, 1968.[1] Jibin Arula, in a 2009 interview, recalled that his unit patch displayed skull markings.[2] The Jabidah massacre on March 18, 1968 was the purported assassinations or executions of Moro army recruits who allegedly mutinied ...

 

Professional soccer league in Canada Football leagueCanadian Premier LeagueFoundedMay 6, 2017; 6 years ago (2017-05-06)First season2019CountryCanadaConfederationCONCACAF(North American Football Union)Number of teams8Level on pyramid1Domestic cup(s)Canadian ChampionshipInternational cup(s)CONCACAF Champions CupCurrent championsForge FC (4th title) (2023)Current CPL ShieldCavalry FC (2nd title) (2023)Most championshipsForge FC (4 titles)Most CPL ShieldsCavalry FC (2 titles)Mos...

1950 film by Rudolph Maté D.O.A.Theatrical release posterDirected byRudolph MatéWritten by Russell Rouse Clarence Greene Produced byLeo C. PopkinStarring Edmond O'Brien Pamela Britton Luther Adler Beverly Campbell Neville Brand Lynn Baggett William Ching Henry Hart Laurette Luez CinematographyErnest LaszloEdited byArthur H. NadelMusic byDimitri TiomkinColor processBlack and whiteProductioncompaniesHarry Popkin ProductionsCardinal PicturesDistributed byUnited ArtistsRelease date April 2...

 

Fictional character from Harry Potter Fictional character Albus DumbledoreHarry Potter characterMichael Gambon as Albus DumbledoreFirst appearanceHarry Potter and the Philosopher's Stone (1997)Last appearanceHarry Potter and the Deathly Hallows (2007)Created byJ. K. RowlingPortrayed by Richard Harris (films 1–2) Michael Gambon (films 3–8) Jude Law (Fantastic Beasts films) Toby Regbo (young, film 7, Fantastic Beasts: The Crimes of Grindelwald) HouseGryffindorIn-universe informationFull nam...

 

Private liberal arts college in New Ulm, Minnesota, United States This article is about the college located in New Ulm, Minnesota. For similarly named colleges, see Luther College.Martin Luther CollegeMottoVia Veritas Vita (Latin)Motto in EnglishThe Way, the Truth, the LifeTypePrivate collegeEstablished1995Religious affiliationLutheran (Wisconsin Evangelical Lutheran Synod)ChairmanRev. Michael WoldtPresidentRev. Richard GurgelProvostJeffery WiechmanAcademic staff87Students860 (Fall 2019)...

Neighbourhood in Ontario, Canada Parts of this article (those related to the notable landmarks of a Canadian neighborhood) need to be updated. The reason given is: Requires update per P:WP.. Please help update this article to reflect recent events or newly available information. (March 2023) Neighbourhood in Toronto, Ontario, CanadaCityPlaceNeighbourhoodView of western CityPlace (2022)VicinityLocation within TorontoCoordinates: 43°38′24″N 79°23′43″W / 43.640044°N 79...

 

Pahlawan Republik Kuba Penghargaan Pahlawan Republik Kuba Dianugerahkan oleh the Republik Kuba Jenis Ordo tingkat tunggal Persyaratan penerima Warga Kuba, warga asing Status Aktif Yang terkait *Ordo José Martí Ordo Cienfuegos Gelar Pahlawan Republik Kuba (Spanyol: Héroe de la República de Cuba) adalah sebuah penghargaan di Kuba, yang dianugerahi atas tindakan heroik yang berjasa terhadap negara dan masyarakat Kuba. Penghargaan tersebut telah diberikan oleh lebih dari empat puluh ...

 

Sikorsky S-42 adalah pesawat terbang komersial tahun 1930-an yang dirancang dan dibangun oleh Sikorsky Aircraft untuk memenuhi persyaratan 1931 dari Pan American World Airways (Pan Am) sebagai pesawat terbang jarak jauh lintas Atlantik. Flying Clipper dan Pan Am Clipper adalah nama lain untuk S-42. Referensi Davies, R.E.G. Pan Am: An Airline and its Aircraft. New York: Orion Books, 1987. ISBN 0-517-56639-7. Yenne, Bill. Seaplanes & Flying Boats: A Timeless Collection from Aviation's Golde...

For other uses, see Corfu (disambiguation). Regional unit in Ionian Islands, GreeceCorfu Περιφερειακή ενότηταΚερκύραςRegional unitMunicipalities of CorfuCorfu within GreeceCoordinates: 39°40′N 19°45′E / 39.667°N 19.750°E / 39.667; 19.750CountryGreeceRegionIonian IslandsCapitalCorfuGovernment • Vice GovernorChristos SkourtisArea • Total641.057 km2 (247.513 sq mi)Population (2011) •...

 

Constant Puyo Información personalNombre de nacimiento Émile Joachim Constant Puyo Nacimiento 12 de noviembre de 1857 Morlaix (Francia) Fallecimiento 6 de octubre de 1933 (75 años)París (Francia) Sepultura Saint-Martin-des-Champs Nacionalidad FrancesaEducaciónEducado en Escuela Politécnica Información profesionalOcupación Fotógrafo Cargos ocupados Presidente de Photo Club de París (desde 1921) Movimiento Pictorialismo Rango militar Comandante Miembro de Photo Club de París Dis...

 

Jasper State Recreation SiteShow map of OregonShow map of the United StatesTypePublic, stateLocationLane County, OregonNearest cityEugeneCoordinates43°58′59″N 122°54′04″W / 43.9831815°N 122.9011896°W / 43.9831815; -122.9011896[1]Operated byOregon Parks and Recreation Department Jasper State Recreation Site is a state park in the U.S. state of Oregon, administered by the Oregon Parks and Recreation Department. See also List of Oregon state...

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (أبريل 2019) ألفونسو أورتيز معلومات شخصية تاريخ الميلاد 30 أبريل 1939  تاريخ الوفاة 27 سبتمبر 1998 (59 سنة)   مواطنة الولايات المتحدة  الحياة العملية المدرسة الأم جامعة ش...

 

22Singel oleh Taylor Swiftdari album RedDirilis12 Maret 2013 (2013-03-12)Format CD single digital download GenrePopDurasi3:52LabelBig MachinePencipta Taylor Swift Max Martin Shellback Produser Max Martin Shellback 22 adalah sebuah lagu yang dinyanyikan oleh penyanyi-penulis lagu asal Amerika Serikat Taylor Swift dalam album studio keempatnya, Red (2012). Lagu ini ditulis oleh Swift bersama dengan produser lagu ini, Max Martin dan Shellback. Lagu ini merupakan single keempat miliknya, yan...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!