코드 작성 후 

Project > Settings 에 진입한다.

그 후 다음과 같이 설정


그리고 컴파일하면 다음과 같이 Debug 폴더에 asm 파일이 생성된다...



수고~
Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

  1. 스파게티코더 2009.11.24 21:54 신고  댓글주소  수정/삭제  댓글쓰기

    앗 교육시간에 포스팅을~!

  2. BlogIcon louis vuitton replicas 2012.09.12 13:22 신고  댓글주소  수정/삭제  댓글쓰기

    아직 트윗된 메시지가 없습니다. 가장 먼저 공유하세요!

터보 C 3.0 에서 실행 ( DOS )

#include <stdio.h>
#include <bios.h>
#include <ctype.h>
#include <conio.h>

#define RIGHT  0x01
#define LEFT   0x02
#define CTRL   0x04
#define ALT    0x08

void main(void)
{
 clrscr();
   int key,shift;

   /* function 1 returns 0 until a key is pressed */
   while (bioskey(1) == 0);
   while(1)
   {
   /* function 0 returns the key that is waiting */
   key = bioskey(0);
   shift = bioskey(2);

   /* print out the character read */
   printf("%c ascii : '%#x scan : %#x'", key, key & 0x00ff,  key >> 8);
   if(shift & RIGHT) printf(" [RShift]");
   if(shift & LEFT) printf(" [LShift]");
   if(shift & CTRL) printf(" [Ctrl]");
   if(shift & ALT) printf(" [Alt]");

   printf("\n");
   if((key >> 8) == 1) // scan code 1 : ESC
 break;
   }
   getch();


}

Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

  1. BlogIcon 김광용 2009.11.06 17:06 신고  댓글주소  수정/삭제  댓글쓰기

    아... 어떠케 ㅋㅋㅋㅋㅋㅋㅋ
    형 이제 C만하는겨?? ㅋㅋㅋ
    java, java하던 형은 어디로 가고..

  2. BlogIcon 미남 2009.11.06 20:53 신고  댓글주소  수정/삭제  댓글쓰기

    자바는 이제 끝났다. 돈이 안돼.ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 오늘은 이중 연결 리스트에 대해 다시한번 기억을 되살렸다.

자료구조의 기본 중의 기본이지만 구현해 볼 때마다 책 없이 혼자하라고 하면

시간이 꽤 걸린다. 나만그런가;ㅋ

어쨌든 오늘 중요한 자료구조를 또 한번 코딩해본 것은 의미있는 일이다.

 으허허~


      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4
      5 struct A
      6 {
      7         char name[20];
      8         int age;
      9         int salary;
     10         struct A *before;
     11         struct A *next;
     12 } *head, *tail;
     13
     14 void input(void);
     15 void output(void);
     16
     17 int main()
     18 {
     19         head = tail = NULL;
     20         input();
     21         output();
     22         return 0;
     23 }
     24
     25 void input (void )
     26 {
     27         struct A *ptr;
     28
     29         while(1)
     30         {
     31                 if((ptr = (struct A *)malloc(sizeof(struct A))) == NULL)
     32                 {
     33                         printf("Memory Allocation Error\n");
     34                         exit(1);
     35                 }
     36
     37                 printf("\n성명 ? ");
     38                 gets(ptr -> name);
     39                 if(!strcmp(ptr -> name, "end"))
     40                         break;
     41                 printf("나이 ? ");
     42                 scanf("%d", &ptr -> age);
     43                 printf("월급 ? ");
     44                 scanf("%d%*c", &ptr -> salary);
     45                 ptr -> before = NULL;
     46                 ptr -> next = NULL;
     47
     48                 if(head == NULL)
     49                         head = tail = ptr;
     50                 else
     51                 {
     52                         ptr -> before = tail;
     53                         tail -> next = ptr;
     54                         tail = ptr;
     55                 }
     56         }
     57         free(ptr);
     58 }
     59
     60 void output(void)
     61 {
     62         struct A *ptr;
     63
     64         printf("\nNode List head -> tail \n");
     65         ptr = head;
     66         while(ptr)
     67         {
     68                 printf("name : %s, age : %d, salary : %d\n", ptr -> name, ptr -> age, ptr -> salary);
     69                 ptr = ptr -> next;
     70         }
     71         printf("\nNode List tail -> head \n");
     72         ptr = tail;
     73         while(ptr)
     74         {
     75                 printf("name : %s, age : %d, salary : %d\n", ptr -> name, ptr -> age, ptr -> salary);
     76                 ptr = ptr -> before;
     77         }
     78 }
     79
     80

Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

구조체의 메모리 할당은 멤버들을 주어진 순서대로 할당한다.

      1 /*
      2  * 작성일 : 2008. 08. 28.
      3  * 작성자 : 박상현[정보통신총괄]
      4  * 내 용 : 구조체 테스트
      5  */
      6
      7 #include <stdio.h>
      8
      9 int main()
     10 {
     11         struct A1
     12         {
     13                 char a;
     14                 int b;
     15                 char c;
     16         } X;
     17
     18         struct A2
     19         {
     20                 char a;
     21                 char b;
     22                 int c;
     23         } Y;
     24
     25         printf("X sizeof : %d, Y sizeof : %d\n", sizeof(X), sizeof(Y));
     26         return 0;
     27
     28 }
     29

[linux6@cam00 four]$ make
cc -O2 -Wall -Os -g -I/usr/include -c struct.c
cc -o struct  struct.o
[linux6@cam00 four]$ ./struct
X sizeof : 12, Y sizeof : 8

결과에서 보는 것처럼 A1, A2 두 구조체에는 똑같이 char 둘, int 하나씩 정의했으나,

각각의 크기는 12 와 8 로 차이가 났다.

X 구조체를 보면 메모리에 4바이트를 할당한 후 a 멤버를 저장한다. 다음 멤버 b 는 정수이므로

3바이트 남은 공간에 저장될 수 없으므로 3개의 바이트를 건너뛰어 적정한 경계로 이동한다.

그리고 4바이트 할당 후 저장된다. 마지막으로 c 멤버를 위해 4바이트 할당 후 저장한다. 따라서

12바이트를 사용하게 된다.

그러나 Y 구조체는 경계 정렬이 적게 일어나는 멤버들을 인접하여 배치함으로써 구조체 빈 공간을

최소화하였다.

A2 구조체와같이 효율적으로 멤버들을 배치함으로써 낭비되는 공간을 줄이도록 하자.
Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

Makefile 만들기    

      1 # file name : Makefile
      2 #
      3 # role = src file build
      4 #
      5 #
      6
      7 cc = gcc
      8
      9 CFLAGS = -O2 -Wall -Os -g -I/usr/include
     10
     11 TARGET = hello
     12
     13 OBJECTIVES = test.o
     14
     15 $(TARGET):$(OBJECTIVES)
     16         $(CC) -o $(TARGET) $(OBJECTIVES)
     17
     18 .c.o:
     19         $(CC) $(CFLAGS) -c $<
     20
     21 sstrip:
     22         strip $(TARGET)
     23
     24 nnm:
     25         nm $(TARGET) > sym.txt
     26
     27 clean:
     28         rm -f $(TARGET) $(OBJECTIVES)
     29         rm -f *~ sym.txt
     30

이제 make 만 때려주면 test.c 가 컴파일되고 hello 실행파일이 만들어진다.

make sstrip, nnm, clean 등의 명령이 가능해진다.
Posted by 행복한 프로그래머 궁금쟁이박
TAG C, makefile

댓글을 달아 주세요

      가변인자 함수 print 와 add 를 만들어 본다.


      1 #include <stdio.h>
      2 #include <stdarg.h>
      3
      4 void print(char *format, ...);
      5 void add(char *format, ...);
      6
      7 int main()
      8 {
      9         char ch = 'A', *name = "kingdom";
     10         int age = 23;
     11         float height = 173.5;
     12
     13         print("%c \n", ch);
     14         add("%c \n", ch);
     15
     16         print("%c, %d \n", ch, age);
     17         add("%c, %d\n", ch, age);
     18
     19         print("%c, %d, %s\n", ch, age, name);
     20         add("%c, %d, %s\n", ch, age, name);
     21
     22         print("%c, %d, %s, %f\n", ch, age, name, height);
     23         add("%c, %d, %s, %f\n", ch, age, name, height);
     24
     25         return 0;
     26 }
     27
     28 void print(char *format, ...)
     29 {
     30         int i;
     31         va_list list;
     32         va_start(list, format);
     33
     34         for(i = 0 ; format[i] ; i++)
     35         {
     36                 if(format[i] != '%')
     37                         printf("%c", format[i]);
     38                 else
     39                 {
     40                         switch(format[++i])
     41                         {
     42                                 case 'c' : printf("%c", va_arg(list, int));
     43                                            break;
     44                                 case 'd' : printf("%d", va_arg(list, int));
     45                                            break;
     46                                 case 'f' : printf("%f", va_arg(list, double));
     47                                            break;
     48                                 case 's' : printf("%s", va_arg(list, char*));
     49                                            break;
     50                                 default : printf("출력할 자료형 형식이 없습니다.\n");
     51                         }
     52                 }
     53         }
     54         va_end(list);
     55 }
     56
     57 void add(char *format, ...)
     58 {
     59         int i;
     60         double sum = 0;
     61         va_list list;
     62         va_start(list, format);
     63
     64         for(i = 0 ; format[i] ; i++)
     65         {
     66                 if(format[i] == '%')
     67                 {
     68                         switch(format[++i])
     69                         {
     70                                 case 'c' : sum += va_arg(list, int);
     71                                            break;
     72                                 case 'd' : sum += va_arg(list, int);
     73                                            break;
     74                                 case 's' : va_arg(list, char*);
     75                                           break;
     76                                 case 'f' : sum += va_arg(list, double);
     77                                           break;
     78                         }
     79                 }
     80         }
     81         va_end(list);
     82         printf("인수들의 합 : %.2lf\n\n", sum);
     83 }
                 
Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

char **argv
     argv : pointer to char
int (*daytab)[13]
     daytab : pointer to array[13] of int
int *daytab[13]
     daytab : array[13] of pointer to int
void *comp()
     comp : function returning pointer to void
void (*comp)()
     comp : pointer to function returning void
char (*(*x())[])()
     x : function returing pointer to array[] of pointer to function returning char
char (*(*x[3])())[5]
     x : array[3] of pointer to function returning pointer to array[5] of char


Posted by 행복한 프로그래머 궁금쟁이박
TAG C, 포인터

댓글을 달아 주세요

      1 #include <stdio.h>
      2 #include <pthread.h>
      3
      4 #define NUM_THREADS 3
      5
      6 void *hello_thread(void *arg)
      7 {
      8         printf("Thread %d : Hello, World\n", arg);
      9         return arg;
     10 }
     11
     12 int main()
     13 {
     14         pthread_t tid[NUM_THREADS];
     15         int i, status;
     16
     17         for(i = 0 ; i < NUM_THREADS ; i++)
     18         {
     19                 status = pthread_create(&tid[i], NULL, hello_thread, (void*)i);
     20                 if(status != 0)
     21                 {
     22                         fprintf(stderr, "Create thread %d : %d", i, status);
     23                         exit(1);
     24                 }
     25         }
     26         pthread_exit(NULL);
     27 }
     28

이러한 스레드 프로그램을 컴파일 할 때는 옵션을 추가해주어야 한다.

gcc -o thread -lpthread thread.c

Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

const 키워드에 대해 알아본다.

const 키워드를 이용하면 변수를 상수화 시킬 수 있다.

const int num = 200;

위와 같이 정의되어 있다고 가정할 때 num 에 새로운 값을 할당하면 컴파일 오류가 난다.

변수는 값을 변경할 수 있으나 num 은 상수로 선언되었으므로 상수는 값을 변경할 수 없다.
Posted by 행복한 프로그래머 궁금쟁이박
TAG C

댓글을 달아 주세요

  아래는 fork 를 사용한 테스트 프로그램이다.
 
     1 #include <stdio.h>
      2 #include <sys/types.h>
      3 #include <unistd.h>
      4
      5 int main()
      6 {
      7         pid_t pid;
      8         printf("Calling fork \n");
      9
     10         pid = fork();
     11
     12         if(pid == 0)
     13                 printf("I'm the child process\n");
     14         else if(pid > 0)
     15                 printf("I'm the parent process\n");
     16         else
     17                 printf("fork failed\n");
     18
     19         return 0;
     20 }

gcc -Wall -o fork fork.c 해서 컴파일하고 strace 를 해보자.

사용자 삽입 이미지

화면에서 보이는 것이 무엇인지 잘 이해할 수 없다.....

프로그램이 실행될 때 어쩐 시스템콜이 발생하는지를 추적해 주는 명령어인 것이다.
Posted by 행복한 프로그래머 궁금쟁이박
TAG C, 리눅스

댓글을 달아 주세요