본문 바로가기

C언어

11월 29일 C언어 구조체 -구조체- 구조체는 사용자 정의 자료형이다. 먼저 #define test 1 이라고 쓰는데 #define \test 1 원래는 안되는 문장이지만 \(역슬래쉬)를 붙이면 연결된 문장으로 인식한다.  ex) struct scb // new type 이며 c++에서는 Class { int A; // old type 이다 }; class 안에는 함수도 넣을 수가 있다. class scb A 는 앞의 class를 생략하고 scb A 와같다. 여기서 A를 객체(메모리에 실제 존재해야)라고 하며 객체 지향 프로그래밍을(Object Oriented Programing) OOP라도 한다. C 는 구조적 프로그램이다. C에서는 함수 포인터를 사용하여 구조체 안에 함수를 넣는 효과를 낼 수 있는데, C로 객체지향흉내를 내.. 더보기
11월 25일 C언어 Visual C++ 6.0 디버그 모드, 함수호출 구조 함수호출 구조 Visual C++ 6.0 디버그 모드 이용 소스코드에서 브레이크 포인트 를 먼저 정해야한다. 원하는 라인에서 F9를 누르면 라인에 빨간 표시가 생기는데 브레이크 포인트라고 한다. 실행파일이 있어야 디버그 모드가 되므로 빌드를 한 후 디버그 모드를 사용하자 #include "HexaView.h" void test(int, int); int main() { int A = 0x12345678; int B = 0xABCDEFBA; printf("[%08X] : main() address\n", main); test(A, B); // PrintHexaNAscii(&B, 100); return 0; } void test2() { printf("test2\n"); } void test(int a, i.. 더보기
11월 24일 C언어 Hexaview 화면 분석 소스코드 #include void test(int,int); int main() { int A=0x12345678; int B=0xABCDEFBA; printf("Address of main():%p\n",main); test(A,B); } void test(int A,int B) { int c=0x11223344; int *p=&c; printf("%08X\n",&A); printf("%08X\n",&B); PrintHexaNAscii(&p,100); } P C 4-1 4-2 Test A Test B x x x x x x Int B Int A 헥사뷰어를 보면 4바이트씩 주소를 차지하고 있다. 그것을 표로 나타냈는데 위의 표에서 4-1과 4-2에 어떤 값이 들어 있는지 알아보자. Stack 영역에 저장이.. 더보기
11월 23일 C언어 헥사뷰어,make build tool 헥사뷰어 hexaview.c - 함수구성파일 hexaview.h - 함수원형선언 및 정의 main.c - main함수로 Hexaview 호출 hexaview.h 파일 파일 포맷 선언이다. srec는 s-record 이며 모토로라회사의 저장방식이다 ihex 는 인텔사의 저장방식이다. # Object files directory OBJDIR = . 여기서 .은 현재디렉토리를 나타낸다. # Optimization level, can be [0, 1, 2, 3, s]. OPT = s #ifndef __hexaview__ /*define에는 _(언더바)를 붙인다. 원래 하나있었으므로 _2개*/ #define __hexaview__ /*위의 문장은 중복 인클루드를 막기위해 #ifndef(if not define)으.. 더보기
#Pragma 지시자 C언어의 장점 중 하나는 어느 운영체제나 플랫폼으로 쉽게 이식될 수 있는 이식성(Portability)이다. 유닉스에서 작성한 소스를 윈도우즈로 가져와 컴파일하면 똑같은 동작을 하는 실행 파일을 얻을 수 있다. 그러나 이 이식성은 어디까지나 소스 차원에서 이식 가능성을 의미하는 것이지 컴파일된 결과인 실행 파일은 그렇지 않다. C언어는 이식성이 있지만 C언어를 특정 플랫폼에 맞게 컴파일하여 고유의 실행 파일을 만들어 내는 컴파일러는 본질적으로 플랫폼에 종속적이다. 그래서 각 플랫폼에서 실행되는 컴파일러는 플랫폼의 고유한 기능을 수행하기 위한 지원을 해야 한다. 플랫폼별로 구조나 기능이 다르기 때문에 구현도 약간씩 달라질 수 있는데 예를 들어 메모리를 관리하는 방식이나 실행 파일의 특수한 구조로 인한 코드.. 더보기
11월 22일 C언어 main()함수의 인수,구조체 8.8 main() 함수의 인수 #include int main(int iNum,char *s[]) { int i; //printf("%d\n",iNum); for(i=0;i gcc 로 컴파일 할때 옵션을 gcc -v --save-temps -o 출력파일이름 원본파일.c 로 하게 되면 전처리 과정을 확인 할 수 있다. 구조체를 사용하려면 명령어 struct 가 필요하다. 구조체는 사용자 정의 자료형 이라는 뜻이므로 기존의 자료형(int,char등)과는 다르다. main()함수 안에서 구조체를 선언하게 되면 main()함수 안에서만 사용이 가능하기 때문에 main() 함수의 위에서 사용한다. #include struct Park { int iNum; int *P; char cNum; char cNum2; .. 더보기
11월 19일 C언어 문자열을다루는배열,문자열을 가리키는 포인터의 배열 8.5 문자열 함수들 *signed, unsigned #include int main() { char A=0x7F; //7은 0100이므로 앞이 0이므로 7F가 출력되지만 char B=0x8F; //8은 1000 이므로 앞이 1 이므로 남은 4바이트 를 1로 다채워서(부호확장) FFFFFF8F로 출력이 된다 char C=0xFF; unsigned char A1=0x7F; //unsigned 형이 속도가 빠르다, signed 는 부호확장시에 +,-체크를 해야하므로 unsigned 에 비해 느린것이다. unsigned char B1=0x8F; unsigned char C1=0xFF; printf("%X,%X,%X\n",A,B,C); printf("%X,%X,%X\n",A1,B1,C1); return 0; }.. 더보기
11월 18일 C언어 문자열의선언,gets(),puts(),문자열 함수들 8.3 문자열의 선언 char carray[]={'a','b','c'};//문자배열로 널값이 없으므로 Stack에3바이트 저장되고 코드영역에 3바이트 저장되있다 char astring[]={'a','b','c','\0'};//문자열 스텍4바이트 코드 4바이트 char bstring[]="abc";//문자열 스텍 4바이트 코드 4바이트 char *cstring[]="abc";//문자열 스텍 4바이트 코드 4바이트 문자열 상수의 내용을 변경 시키는 프로그램의 예 #include int main() { char *cstring = "abc"; //*cstring 주소는 stack 에 저장되어 있다 printf("cstring: %p %s\n",cstring,cstring);//"abc"의 주소이기 때문에 코드.. 더보기
Hex 뷰어 [Hex 뷰어] 이진(Binary) 데이터를 읽어 hex 형태로 보여주는 C 프로그램 코드는 다음과 같다. [출력화면] - 메뉴(Address 부분): 번지는 세로로 16씩 증가(0x0000~0x0060). 가로는 세부 번지에 해당함 - Hex 출력부분: 각 번지별로 1byte씩 출력 - Ascii 출력부분: 문자는 그대로 출력(%c), 특수문자나 Ascii 범위를 벗어난 경우 점(.)으로 출력함 1. PrintHexaNAscii 함수를 구현하시오. void PrintHexaNAscii(const unsigned char *buffer, int size) { int bsize1=7; int bsize2=16; unsigned char buffer1[bsize1][bsize2]; int i,j,k; pri.. 더보기
달팽이 배열 [달팽이 배열] N*N 정방행렬에 달팽이 집과 같은 순서로 데이터를 저장한다. 달팽이 배열은 배열의 크기나 시계 방향 또는 반시계 방향 어디든지 상관 없으나, 이 문제에서는 외부에서 중심까지 시계 방향으로 회전시키는 경우를 다룬다. ※ 4X4 달팽이 배열을 분석하시오. ※ 5X5 달팽이 배열을 분석하시오. 1. 4X4 정방행렬에 달팽이 집과 같은 순서로 숫자 1부터 차례대로 기억시킨 후, 그 값을 출력하시오. 2. 5X5 정방행렬에 달팽이 집과 같은 순서로 숫자 1부터 차례대로 기억시킨 후, 그 값을 출력하시오. 소스 코드 #include int max; int main() { int dal[50][50]; int i; int x=0; int y=-1; int t=1; int p; int cnt=1; .. 더보기