개발의변화
7. 프로그래밍 언어론 본문
python
list = [1,2,3,4,5,6]
print(list[-2:-4:-1])
ASP,JSP,CGI,PHP 서버 측에서 실행
Javascriipt, VBScript 등은 클라이언트 측에서 실행
CSS
:link 사용자가 아직 한 번도 이 링크를 통해서 연결된 페이지를 방문하지 않은 상태를 선택함
:visited 사용자가 한 번이라도 이 링크를 통해서 연결된 페이지를 방문한 상태를 선택함
:hover 사용자의 마우스 커서가 링크 위에 올라가 있는 상태를 선택함
:active 사용자가 마우스로 링크를 클릭하고 있는 상태를 선택함
:focus 포커스를 가지고 있는 input 요소를 모두 선택함
객체지향 프로그래밍
객체, 클래스 재사용
Smalltalk, Simula, java 언어는 객체지향 개념을 잘 표현하고 있다.
추상메소드는 선언만 하고 그 내용은 기술하지 않은 메소드이다.
오버라이딩, 오버로딩 모두 다형성을 지원하다.
C++
다중상속 가능
함수 오버로딩 가능하나 한 클래스 내에서 동일한 이름을 가진 다수의 함수는 정의가능
데이터 캡슐화, 추상화
다형성과 상속
다형성의 지원, 동적 바인딩
고급언어 컴파일 단계
소스코드 -> 구문분석 -> 의미분석 -> 어휘분석 -> 코드최적화 -> 코드생성 -> 링크
구의어
시스템 S/W
컴파일러: 고급언어를 이진목적모듈로 변환기능
링커: 여러 목적모듈을 ㅇ통합하여 실행 가능한 하나의 모듈로 변환기능
로더: 실행 가능한 모듈을 주기억장치에 탑재기능
어셈블러: 어셈블리 언어로 기술된 프로그램을 목적 코드로 변환
언어의 문법(grammer)을 구성하는 요소
시작기호(start symbol): 생성규칙의 시작기호
생성규칙들(production rules): 문법 규칙들의 집합
비단말기호들(non-terminal symbols)
C 프로그램을 컴파일
<- 원시프로그램
전처리: 소스파일 내부에 있는 전처리 명령
<- 헤더 포함, 매크로 확장
컴파일: 전처리된 소스파일을 컴파일러를 이용하여 기계어로 번역,
<- 어셈블리코드
어셈블: 컴파일을 수행한 후 첫 *.s인 어셈블리어를 어셈블러를 통해 *.o의 기계코드 생성
<- 기계코드
링크 <- static libraries : 컴파일과정에서 생성된 *obj 파일과 소스코드에서 사용되는 함수들이 들어있는 *lib 파일을 이용하여 실행가능한 파일을 만든다.
실행파일
a && b : &&는 논리연산 AND 의미, ==는 등기여산 같은가를 의미
a & b
a == b
a - b
C언어 포인터 변수
다른 변수의 주소값 저장
포인터 변수의 크기는 가리키고 있는 변수의 종류에 따라 달라지지않는다. -> 가리키는 변수의 주소를 저장
가리키곡 있는 변수값을 읽기 위해서는 *연산자를 사용
포인터 변수에 일반 변수의 주소를 대입하기 위해서는 &연산자
포인터 변수를 가리키는 포인터 변수를 선언
#include <stdio.h>
void main() {
int x = 0x15213F10 >> 4;
char y = (char) x;
unsigned char z = (unsigned char) x;
printf("%d, %u", y,z)
}
#include <stdio.h>
void main() {
int num[4] = {1,2,3,4};
int *pt = num;
pt++;
*pt++ = 5;
*pt ++= 10;
pt--;
*pt +++= 20;
printf("%d %d %d %d", num[0],num[1],num[2],num[3]);
}
pt++; 주소가 올라감
*pt++; 또한 주소가 올라감
*pt ++= 10 현재 주소 10으로 만들고 pt 값 1증가
*pt +++= 20; // *pt += 20; 수행 후 pt의 값을 1증가