명령형 프로그래밍

Imperative programming

컴퓨터 과학에서 명령형 프로그래밍은 프로그램 상태를 바꾸는 문장을 사용하는 소프트웨어의 프로그래밍 패러다임입니다.자연어에서의 명령어가 명령어를 표현하는 것과 거의 같은 방법으로 명령어 프로그램은 컴퓨터가 실행하는 명령어로 구성됩니다.필수 프로그래밍은 예상되는 결과에 대한 개략적인 설명보다는 프로그램이 어떻게 단계적으로 작동하는지를 설명하는 데 초점을 맞춥니다.

이 용어는 프로그램이 어떻게 [1]결과를 달성해야 하는지에 대한 모든 세부 사항을 지정하지 않고 프로그램이 무엇을 달성해야 하는지에 초점을 맞추는 선언적 프로그래밍과는 대조적으로 종종 사용됩니다.

필수 및 절차 프로그래밍

절차 프로그래밍은 프로그램이 하나 이상의 절차(서브루틴 또는 함수라고도 함)에서 구축되는 필수 프로그래밍의 한 유형입니다.이 용어는 동의어로 자주 사용되지만 프로시저의 사용은 필수 프로그램의 표시 방식과 구성 방식에 극적인 영향을 미칩니다.상태 변화가 프로시저에 국한되거나 명시적인 인수와 프로시저로부터의 반환으로 제한되는 헤비 프로시저 프로그래밍은 구조화된 프로그래밍의 한 형태입니다.1960년대부터 구조화된 프로그래밍과 모듈러 프로그래밍은 일반적으로 필수 프로그램의 유지관리성과 전반적인 품질을 개선하기 위한 기술로 추진되어 왔다.객체 지향 프로그래밍의 배후에 있는 개념은 이 접근방식을 확장하려고 시도합니다.

절차적 프로그래밍은 선언적 프로그래밍을 향한 단계로 간주될 수 있습니다.프로그래머는 프로시저의 이름, 인수, 반환 유형(및 관련 코멘트)을 보는 것만으로 특정 프로시저가 어떻게 그 결과를 달성하는지 상세하게 볼 필요 없이 특정 프로시저가 무엇을 해야 하는지 알 수 있습니다.동시에 실행할 문장과 실행 순서를 대부분 수정하기 때문에 완전한 프로그램은 여전히 필수적입니다.

필수 프로그래밍의 근거 및 기반

거의 모든 컴퓨터의 프로그램을 구축하기 위해 사용되는 프로그래밍 패러다임은 일반적으로 필수 [note 1]모델을 따릅니다.디지털 컴퓨터 하드웨어는 컴퓨터 고유의 기계 코드를 실행하도록 설계되어 있으며, 보통 명령형 스타일로 작성됩니다. 단, 리스프 머신과 같은 일부 아키텍처에서는 다른 패러다임을 사용하는 하위 수준의 컴파일러와 인터프리터가 존재합니다.

이 저레벨의 관점에서 프로그램 상태는 메모리의 내용에 의해 정의되며, 문장은 컴퓨터의 네이티브 머신 언어로 된 명령이다.상위 수준의 명령어는 변수와 더 복잡한 문장을 사용하지만 여전히 동일한 패러다임을 따릅니다.레시피프로세스 체크리스트는 컴퓨터 프로그램은 아니지만 필수 프로그래밍과 유사한 개념으로 각 단계가 하나의 명령이며 물리적 세계가 상태를 유지합니다.명령형 프로그래밍의 기본 개념은 개념적으로 익숙하고 하드웨어에 직접 구현되어 있기 때문에 대부분의 컴퓨터 언어는 명령형 스타일입니다.

할당문은 명령 패러다임에서 메모리에 위치한 정보에 대한 연산을 수행하고 나중에 사용하기 위해 결과를 메모리에 저장합니다.또한 고급 명령어는 산술 연산함수 평가의 조합으로 구성될 수 있는 복잡한 표현식의 평가와 그 결과값의 메모리 할당을 허용합니다.루프 스테이트먼트(while loops, do while loops 및 loops)를 사용하면 일련의 스테이트먼트를 여러 번 실행할 수 있습니다.루프는 미리 정의된 횟수를 포함하는 문을 실행하거나 특정 조건이 충족될 때까지 반복 실행할 수 있습니다.조건부 분기문사용하면 조건이 충족된 경우에만 일련의 문을 실행할 수 있습니다.그렇지 않으면 문은 건너뛰고 실행 시퀀스는 다음 문부터 계속됩니다.무조건 분기문을 사용하면 실행 시퀀스를 프로그램의 다른 부분으로 전송할 수 있습니다.여기에는 점프(많은 언어에서 goto라고 함), 스위치 및 서브프로그램, 서브루틴 또는 프로시저 콜(통상은 콜 후에 다음 문으로 돌아갑니다)이 포함됩니다.

고급 프로그래밍 언어의 개발 초기에, 블록의 도입은 일련의 스테이트먼트와 선언을 하나의 스테이트먼트처럼 취급할 수 있는 프로그램의 구축을 가능하게 했다.이것은 서브루틴의 도입과 함께 복잡한 구조를 보다 단순한 절차적 구조로 계층적으로 분해하여 표현할 수 있게 했다.

많은 필수 프로그래밍 언어(Fortran, BASIC, C 등)는 어셈블리 [2]언어의 추상화입니다.

명령어 및 객체 지향 언어의 역사

최초의 명령어는 원래 컴퓨터의 기계어였습니다.이러한 언어에서는 명령이 매우 간단하여 하드웨어 구현은 쉬워졌지만 복잡한 프로그램을 만드는 데는 방해가 되었습니다.FORTRAN은 1954년부터 IBM(International Business Machines)의 John Backus에 의해 개발된 최초의 주요 프로그래밍 언어로서 복잡한 프로그램을 만들 때 기계 코드로 나타나는 장애물을 제거하였습니다.FORTRAN은 명명된 변수, 복잡한 식, 하위 프로그램 및 현재 명령형 언어에서 일반적인 많은 다른 기능을 허용하는 컴파일된 언어였습니다.이후 20년 동안 많은 주요 고급 명령형 프로그래밍 언어들이 발전했습니다.1950년대 후반과 1960년대에 ALGOL은 수학 알고리즘을 보다 쉽게 표현하기 위해 개발되었으며 심지어 일부 컴퓨터에서는 운영 체제의 대상 언어로도 사용되었습니다.MUMPs(1966)는 명령어 패러다임을 논리적인 극단으로 이끌었으며, 심지어 IF와 ELSE 명령어를 서로 독립적으로 만드는 범위까지 전적으로 명령어에 의존했다. $TEST라는 고유 변수에 의해서만 연결되었다. COBOL(1960)과 BASIC(1964)은 둘 다 프로그래밍 구문을 mo처럼 보이게 하려는 시도였다.나는 영어를 좋아한다.1970년대에 파스칼니클라우스 워스에 의해 개발되었고 C는 벨 연구소에서 일하는 동안 데니스 리치(Dennis Ritchie)에 의해 만들어졌다.워스는 모듈라-2오베론을 설계했다.미국 국방부의 필요에 따라, Jean IchbiahHoneywell의 팀은 언어의 요건을 정의하는 4년간의 프로젝트를 마치고 1978년에 Ada를 설계하기 시작했습니다.사양은 1983년에 처음 발표되었으며 1995년, 2005년, 2012년에 개정되었습니다.

1980년대는 객체 지향 프로그래밍에 대한 관심이 급격히 증가했다.이 언어들은 문체에 필수적이지만 객체를 지원하는 기능이 추가되었습니다.20세기의 마지막 20년 동안 그러한 언어들이 많이 발달했다.1969년 앨런 케이가 고안한 스몰톡-801980년 제록스 팔로알토연구센터에서 출시됐다.다른 오브젝트 지향 언어의 개념에서 도출 - Simula(1960년대에 개발된 세계 최초의 오브젝트 지향 프로그래밍 언어): Bjarne Stroustrup은 C에 기반한 객체 지향 언어인 C++설계했습니다.C++설계는 1979년에 시작되었고 첫 번째 구현은 1983년에 완료되었다.1980년대 후반과 1990년대에 객체 지향 개념을 그린 주목할 만한 필수 언어는 1987년Larry Wall에 의해 출시된 Perl, 1990년Guido van Rossum에 의해 출시된 Python, 1991년마이크로소프트에 의해 출시Visual Basic 및 Visual C+(MFC 포함) 2.0이었다.1994년 asmus Lerdorf, 1995년 James Gosling(Sun Microsystems), 1995년 Brendan Eich(Netscape)의 JavaScript, 1995년 발매된 마츠모토 유키히로의 Ruby.Microsoft의NET Framework(2002년)는 그 핵심에 필수적이며, 주요 타깃 언어인 VB도 마찬가지입니다.NETC#에서 동작하지만 Microsoft의 기능 언어인 F#도 동작합니다.


포트란

FORTRAN(1958)은 "IBM Mathemical FORTula TRAN슬레이팅 시스템"으로 공개되었다.이것은 과학적 계산을 위해 설계되었으며, 끈을 다룰 수 있는 시설은 없었습니다.선언, 문장과 함께 다음을 지원했습니다.

성공 이유:

  • 프로그래밍과 디버깅 비용은 컴퓨터 운영 비용보다 낮았다.
  • IBM이 지원했습니다.
  • 당시 응용 프로그램들은 [3]과학적이었습니다.

그러나 IBM이 아닌 공급업체들도 Fortran 컴파일러를 작성했지만 IBM의 [3]컴파일러에 실패할 가능성이 높은 구문을 사용했습니다.ANSI(American National Standards Institute)는 1966년에 최초의 Fortran 표준을 개발했습니다.1978년에는 Fortran 77이 1991년까지 표준이 되었다.Fortran 90은 다음을 지원합니다.

코볼

COBOL(1959)은 "COMMon Business Oriented Language"를 의미합니다.포트란이 기호를 조작했습니다.곧 기호는 숫자가 아니어도 된다는 것을 깨달았고, 그래서 문자열이 [4]도입되었다.미국 국방부그레이스 호퍼를 주요 공신으로 하여 코볼의 발전에 영향을 미쳤다.그 진술은 영어 같고 장황했다.매니저들이 프로그램을 읽을 수 있도록 언어를 설계하는 것이 목표였다.그러나 체계적인 진술이 부족하여 이러한 [5]목표를 방해하였다.

COBOL의 개발은 엄격히 통제되었고, 그래서 방언은 ANSI 표준을 필요로 하지 않았다.그 결과 1974년까지 25년 동안 바뀌지 않았다.1990년대 버전은 객체 지향 프로그래밍[5]같은 결과적인 변화를 가져왔다.

알골

ALGOL(1960)은 "ALGOrithmic Language"의 약자입니다.그것은 프로그래밍 언어 [6]디자인에 지대한 영향을 끼쳤다.유럽과 미국의 프로그래밍 언어 전문가들로 구성된 위원회에서 나온 그것은 표준 수학 표기법을 사용했고 읽기 쉬운 구조 설계를 가지고 있었다.Algol은 최초로 Backus-Naur [6]형식을 사용하여 구문을 정의했습니다.이를 통해 구문 지향 컴파일러가 탄생했습니다.다음과 같은 기능이 추가되었습니다.

  • 변수가 블럭에 로컬인 블록 구조입니다.
  • 변수 경계가 있는 배열.
  • "for" 루프
  • 기능하고 있습니다.
  • 재귀[6]

알골의 직계 후손으로는 파스칼, 모듈라-2, 아다, 델파이, 오베론있다.다른 브랜치에는 C, C++, [6]Java있습니다.

기본의

BASIC(1964)은 "Beginner's All Purpose Symbolic Instruction Code"의 약자이다.그것은 모든 학생들이 배울 [7]수 있도록 다트머스 대학에서 개발되었다.학생이 더 강력한 언어를 배우지 못해도 [7]기본을 기억할 것입니다.베이직 인터프리터는 1970년대 후반에 제조된 마이크로컴퓨터에 설치되었다.마이크로컴퓨터 산업이 성장하면서 언어도 [7]성장했습니다.

Basic은 인터랙티브 [7]세션을 개척했습니다.환경 내에서 운영체제 명령어를 제공하였습니다.

  • 'new' 명령으로 빈 슬레이트가 생성되었습니다.
  • 스테이트먼트는 즉시 평가됩니다.
  • 문 앞에 행 번호를 붙여 문을 프로그래밍할 수 있습니다.
  • 'list' 명령을 실행하면 프로그램이 표시되었습니다.
  • 'run' 명령이 프로그램을 실행했습니다.

그러나 Basic 구문은 대형 [7]프로그램에는 너무 단순했습니다.최근의 방언은 구조와 객체 지향 확장을 추가했습니다.Microsoft의 Visual Basic은 여전히 널리 사용되고 있으며 그래픽 사용자 [8]인터페이스를 생성합니다.

C

C프로그래밍 언어(1973)는 BCPL이라는 언어가 B대체되고 AT&T Bell Labs는 다음 버전을 C라고 불렀기 때문에 이 이름을 갖게 되었습니다.그 목적은 UNIX [9]운영체제를 작성하는 것이었습니다.C는 비교적 작은 언어이기 때문에 컴파일러를 쉽게 쓸 수 있습니다.그 성장은 1980년대 [9]하드웨어의 성장을 반영하고 있습니다.어셈블리 언어 기능을 갖추고 있지만 높은 수준의 구문을 사용하기 때문이다.다음과 같은 고급 기능이 추가되었습니다.

컴퓨터 메모리 맵

C는 프로그래머가 메모리 데이터의 어느 영역을 저장해야 하는지를 제어할 수 있도록 합니다.글로벌 변수와 스태틱 변수에는 최소 클럭사이클이 필요합니다스택은 표준 변수 선언에 자동으로 사용됩니다. 메모리는 함수에서 포인터 변수로 반환됩니다.

  • 전역정적 데이터 영역은 프로그램 영역 바로 위에 있습니다.(프로그램 영역을 기술적으로는 텍스트 영역이라고 합니다.기계 명령이 저장되는 곳입니다.
  • 글로벌 데이터 영역과 스태틱 데이터 영역은 기술적으로 두 가지 [10]영역입니다.한 영역은 초기화 데이터 세그먼트라고 불리며, 기본값으로 선언된 변수가 저장됩니다.다른 영역은 세그먼트별 시작 블록이라고 하며, 기본값 없이 선언된 변수가 저장됩니다.
  • 글로벌 데이터 영역과 스태틱 데이터 영역에 저장된 변수는 컴파일 시 주소가 설정됩니다.프로세스 수명 내내 가치관을 유지합니다.
  • 글로벌 및 스태틱지역은 글로벌 변수 위에 선언된(외부) 글로벌 변수를 저장합니다.main()기능합니다.[11]글로벌 변수는 에 표시됩니다.main()소스코드에 있는 다른 모든 기능들.
한편, 내부 변수 선언은main(), 기타 기능 또는 내부{ } 블록 구분 기호는 로컬 변수입니다.로컬 변수에는 형식 모수 변수도 포함됩니다.매개 변수 변수는 함수 [12]정의의 괄호 안에 들어 있습니다.이들은 함수에 대한 인터페이스를 제공합니다.
  • 를 사용하여 선언된 로컬 변수static프레픽스는 글로벌스태틱데이터 영역에도 [10]저장됩니다.전역 변수와 달리 정적 변수는 함수 또는 블럭 내에서만 볼 수 있습니다.정적 변수는 항상 값을 유지합니다.사용 예로는 다음 함수를 들 수 있습니다.int increment_counter(){ static int counter = 0; counter++; return counter;}
  • 스택 영역은 메모리 상단의 [13]주소 근처에 있는 연속된 메모리 블록입니다.스택에 배치된 변수는 아이러니하게도 위에서 [13]아래로 채워집니다.스택 포인터는 마지막으로 [13]입력된 메모리 주소를 추적하는 특수 목적 레지스터입니다.변수는 어셈블리 언어 PUSH 명령을 통해 스택에 배치됩니다.따라서 이들 변수의 주소는 런타임 중에 설정됩니다.스택 변수의 범위를 잃는 방법은 POP 명령을 사용하는 것입니다.
  • 로컬 변수가 선언된 경우static형식 파라미터 [14]변수를 포함한 접두사는 자동변수라고[11] 불리며 [10]스택에 저장됩니다.기능 또는 블록 내부에서 볼 수 있으며 기능 또는 블록을 종료하면 스코프가 손실됩니다.
  • 영역은 [10]스택 아래에 있습니다.아래부터 위까지 채워져 있습니다.운영체제히프 포인터와 할당된 메모리 [15]블록 목록을 사용하여 히프를 관리합니다.스택과 마찬가지로 힙 변수의 주소는 런타임 중에 설정됩니다. 포인터와 스택포인터가 만나면 메모리 부족 오류가 발생합니다.
  • C가 제공하는 것은malloc()힙 메모리를 [16]할당하는 라이브러리 함수.힙에 데이터를 채우는 것은 추가 복사 기능입니다.힙에 저장된 변수는 포인터를 사용하여 함수에 경제적으로 전달됩니다.포인터가 없으면 데이터 블록 전체가 스택을 통해 함수에 전달되어야 합니다.

C++

1970년대에 소프트웨어 엔지니어는 대규모 프로젝트를 [17]모듈로 분할하기 위해 언어 지원이 필요했습니다.한 가지 분명한 기능은 대규모 프로젝트를 물리적으로 개별 파일로 분해하는 것이었습니다.그다지 명확하지 않은 기능은 대규모 프로젝트를 논리적으로 추상 데이터 [17]유형으로 분해하는 것이었습니다.당시 언어는 정수, 부동소수점수, 문자열과 같은 구체적인(스칼라) 데이터형을 지원했습니다.구체적인 데이터형은 [18]이름의 일부로 표현됩니다.추상 데이터 유형은 새 이름이 할당된 구체적인 데이터 유형의 구조입니다.예를 들어, 정수 목록을 호출할 수 있습니다.integer_list.

객체 지향 전문용어에서는 추상 데이터형을 클래스라고 부릅니다., 클래스는 정의일 뿐 메모리는 할당되지 않습니다.클래스에 메모리가 할당되어 있는 것을 [19]오브젝트라고 부릅니다.

클래스의 필요성과 안전한 기능 [20]프로그래밍의 필요성을 결합하여 개발된 객체 지향 명령어입니다.객체 지향 언어에서 함수는 클래스에 할당됩니다.할당된 함수를 메서드, 멤버 함수 또는 연산이라고 합니다.객체 지향 프로그래밍[21]객체에 대한 작업실행하는 것입니다.

오브젝트 지향 언어는 서브셋/슈퍼셋 관계를 모델링하는 구문을 지원합니다.집합론에서, 서브셋의 요소는 슈퍼셋에 포함된 모든 속성을 상속합니다.예를 들어, 학생은 사람이다.따라서 학생 집합은 개인 집합의 하위 집합입니다.그 결과, 학생들은 모든 사람에게 공통된 모든 속성을 물려받는다.게다가, 학생들은 다른 사람들은 가지지 않는 독특한 특성들을 가지고 있다.개체 지향 언어는 [22]상속을 사용하여 하위 집합/수퍼셋 관계를 모델링합니다.객체 지향 프로그래밍은 1990년대 [17]후반까지 지배적인 언어 패러다임이 되었다.

C++(1985)는 원래 "C with Classes"[23]라고 불렸다.Simula 언어의 객체 지향 기능을 추가하여 C의 기능을 확장하도록 설계되었습니다.[24]

객체 지향 모듈은 2개의 파일로 구성됩니다.정의 파일을 헤더 파일이라고 합니다.다음은 간단한 학교 어플리케이션의 GRADE 클래스용 C++ 헤더 파일입니다.

// grade.h // -------  // 여러 소스 파일을 포함할 수 있습니다. // 중복 오류가 없는 헤더 파일. // ---------------------------------------------- #ifndef GRADE #정의 GRADE_H의 정의  학급 등급. { 일반의:     // 이것은 생성자 작업입니다.     // ----------------------------------     등급. ( 컨스턴트  편지 );      // 클래스 변수입니다.     // -------------------------      편지;      // 이것은 멤버 조작입니다.     // ---------------------------     인트 등급_점수( 컨스턴트  편지 );      // 클래스 변수입니다.     // -------------------------     인트 숫자; }; #엔디프 

생성자 연산은 클래스 [25]이름과 이름이 같은 함수입니다.이 명령어는 호출 조작이 다음 명령어를 실행할 때 실행됩니다.new진술.

모듈의 다른 파일은 소스 파일입니다.다음은 간단한 학교 어플리케이션의 GRADE 클래스용 C++ 소스 파일입니다.

// grade.cpp // --------- #실패하다 "등급.h"  등급.::등급.( 컨스턴트  편지 ) {     // 키워드 'this'를 사용하여 객체를 참조합니다.     // ----------------------------------------------     이것.->편지 = 편지;      // 이것은 일시적인 응집력입니다.     // -------------------------     이것.->숫자 = 등급_점수( 편지 ); }  인트 등급.::등급_점수( 컨스턴트  편지 ) {     한다면 ( ( 편지 == 'A'    편지 == 'a' ) )         돌아가다 4;     또 다른     한다면 ( ( 편지 == 'B'    편지 == 'b' ) )         돌아가다 3;     또 다른     한다면 ( ( 편지 == 'C'    편지 == 'c' ) )         돌아가다 2;     또 다른     한다면 ( ( 편지 == 'D'    편지 == 'd' ) )         돌아가다 1;     또 다른     한다면 ( ( 편지 == 'F'    편지 == 'f' ) )         돌아가다 0;     또 다른         돌아가다 -1; } 

다음은 간단한 학교 어플리케이션의 Person 클래스용 C++ 헤더 파일입니다.

// person.h // -------- #ifndef Person_H #사람의 정의_H  학급 사람인 { 일반의:     사람인 ( 컨스턴트  *이름. );     컨스턴트  *이름.; }; #엔디프 

다음은 간단한 학교 어플리케이션의 Person 클래스용 C++ 소스 파일입니다.

// person.cpp // ---------- #실패하다 "사람.h"  사람인::사람인 ( 컨스턴트  *이름. ) {     이것.->이름. = 이름.; } 

다음은 간단한 학교 응용 프로그램에서 STUENT 클래스의 C++ 헤더 파일입니다.

// student.h // --------- #ifndef #학생 정의_H  #실패하다 "사람.h" #실패하다 "등급.h"  // 학생은 Person의 하위 집합입니다. // -------------------------------- 학급 학생입니다 : 일반의 사람인{ 일반의:     학생입니다 ( 컨스턴트  *이름. );     등급. *등급.; }; #엔디프 

다음은 간단한 학교 응용 프로그램에서 STUENT 클래스에 대한 C++ 소스 파일입니다.

// student.cpp // ----------- #실패하다 "그럴 수도 있어요.h" #실패하다 "사람.h"  학생입니다::학생입니다 ( 컨스턴트  *이름. ):     // Person 슈퍼클래스의 생성자를 실행합니다.     // -------------------------------------------------     사람인( 이름. ) {     // 다른 할 일이 없습니다.     // ------------------- } 

데모용 드라이버 프로그램은 다음과 같습니다.

// student_cp // --------------- #실패하다 <iostream> #실패하다 "그럴 수도 있어요.h"  인트 주된( 무효 ) {     학생입니다 *학생입니다 = 신규 학생입니다( '스튜던트' );     학생입니다->등급. = 신규 등급.( 'a' );      표준::외치다          // 학생이 Person의 이름을 상속받는 것을 알립니다.         << > 학생입니다->이름.         << > ": 숫자 등급 = "         << > 학생입니다->등급.->숫자         << > "\n";  돌아가다 0; } 

다음은 모든 것을 컴파일하기 위한 make 파일입니다.

# makefile # ------ all : rm student _ rm student *o student _ rm student : rm student _ rm student _ cpp grade . o c++ student _ cpp grade . o c++ student . o student . o student . o student . cppp .  

「 」를 참조해 주세요.

메모들

  1. ^ 재구성 가능한 컴퓨팅은 주목할 만한 예외입니다.

레퍼런스

  1. ^ "Imperative programming: Overview of the oldest programming paradigm". IONOS Digitalguide. Retrieved 2022-05-03.
  2. ^ Bruce Eckel (2006). Thinking in Java. Pearson Education. p. 24. ISBN 978-0-13-187248-6.
  3. ^ a b Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 16. ISBN 0-201-71012-9.
  4. ^ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 24. ISBN 0-201-71012-9.
  5. ^ a b Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 25. ISBN 0-201-71012-9.
  6. ^ a b c d Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 19. ISBN 0-201-71012-9.
  7. ^ a b c d e Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 30. ISBN 0-201-71012-9.
  8. ^ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 31. ISBN 0-201-71012-9.
  9. ^ a b c Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 37. ISBN 0-201-71012-9.
  10. ^ a b c d "Memory Layout of C Programs". 12 September 2011.
  11. ^ a b Kernighan, Brian W.; Ritchie, Dennis M. (1988). The C Programming Language Second Edition. Prentice Hall. p. 31. ISBN 0-13-110362-8.
  12. ^ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 128. ISBN 0-201-71012-9.
  13. ^ a b c Kerrisk, Michael (2010). The Linux Programming Interface. No Starch Press. p. 121. ISBN 978-1-59327-220-3.
  14. ^ Kerrisk, Michael (2010). The Linux Programming Interface. No Starch Press. p. 122. ISBN 978-1-59327-220-3.
  15. ^ Kernighan, Brian W.; Ritchie, Dennis M. (1988). The C Programming Language Second Edition. Prentice Hall. p. 185. ISBN 0-13-110362-8.
  16. ^ Kernighan, Brian W.; Ritchie, Dennis M. (1988). The C Programming Language Second Edition. Prentice Hall. p. 187. ISBN 0-13-110362-8.
  17. ^ a b c Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 38. ISBN 0-201-71012-9.
  18. ^ Stroustrup, Bjarne (2013). The C++ Programming Language, Fourth Edition. Addison-Wesley. p. 65. ISBN 978-0-321-56384-2.
  19. ^ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 193. ISBN 0-201-71012-9.
  20. ^ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 39. ISBN 0-201-71012-9.
  21. ^ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 35. ISBN 0-201-71012-9.
  22. ^ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 192. ISBN 0-201-71012-9.
  23. ^ Stroustrup, Bjarne (2013). The C++ Programming Language, Fourth Edition. Addison-Wesley. p. 22. ISBN 978-0-321-56384-2.
  24. ^ Stroustrup, Bjarne (2013). The C++ Programming Language, Fourth Edition. Addison-Wesley. p. 21. ISBN 978-0-321-56384-2.
  25. ^ Stroustrup, Bjarne (2013). The C++ Programming Language, Fourth Edition. Addison-Wesley. p. 49. ISBN 978-0-321-56384-2.
  • 프랫, 테런스 W. 그리고 마빈 V. 젤코위츠.프로그래밍 언어: 설계구현, 제3판뉴저지 주, 잉글우드 클리프:프렌티스 홀, 1996년
  • Sebesta, Robert W. Programming Languages 개념, 제3판읽기, 매스:애디슨 웨슬리 출판사, 1996년
원래 GNU Free Documentation License에 따라 라이센스가 부여된 Nupedia의 Stan Seibert의 기사 '임페러티브 프로그래밍'을 기반으로 합니다.