C언어를 공부하는데, 무료로 사용할 만한 프로그램이 많습니다만...

저는 윈도우즈 PC사용자를 위한 무료 툴을 정리해보았습니다.

 

: free C Development SW : 

 

 

1. Turbo C

Turbo C같은 DOS상에서 동작하는 툴을 사용해도 됩니다. 

저는 오랜만에 추억을 되살리고자... 터보C를 다시 한번 깔아봤네요.

90년대 대학을 다닌 저로서는 이걸로 수업을 받았습니다... 진짜... ^^

 

무료로 다운 받을 수 있는 경로는 아래입니다. 

 

http://sourceforge.net/projects/turbocforwindows-9/?source=typ_redirect


 

 

 

 

2. GCC설치

Dos상에서 gcc를 사용하는 것이 더 좋을 것 같아서 아래의 링크의 설명을 바탕으로

gcc를 단순하면서도 간편하고 좋네요. 참고하세요.

http://holawang.blogspot.kr/2014/02/gcc-installing-gcc-at-windowsmingw-or.html

 

gcc설치하고, cmd 처서... 거기서 빌드하고, 편집은 메모장에서 하는 방식으로 하면 좋네요.

1) notepad test.c

2) 노트패트가 실행되면 거기서 코딩하고

3) commend창에서는 gcc -o test test.c 를 쳐서 빌드하고

4) test.exe를 실행해서 결과를 봅니다.

 

 

3. Tutorials point

웹 상에서 바로 프로그램 설치 없이 코딩과 컴파일 실행을 모두 해볼 수 있는 곳입니다.

아마도 물론 다양한 라이브러리를 제약 없이 쓰는 것들은 안될 것 같지만...... 

가볍게 C언어 기초 책을 보면서 따라 한다면, 이곳에 접속해서 공부하시는 것도 좋을 것 같습니다.

우선은 이 글을 읽으시면서, 한번도 프로그램을 설치해보지 않았다면, 먼저 방문해보세요.

 

투토리얼스 포인트: http://www.tutorialspoint.com/compile_c_online.php

          

추가로 집에 아이패드가 있는데, 아이패드에서 사파리 브라우저를 통해 이곳을 접근해서 코딩을 해도 문제 없이 되더라고요. 

실제 컴파일러가 아이패드에 올라온 것은 아닌 것 같고,

사이트의 서버에서, 빌드를 해주고, 그 결과만 text로 동적으로 보여주는 형식 같습니다.

 

 

4. 코드 블록 (code::Blocks)

 이건 최근에 안건데, 괜찮은 무료 IDE(통합개발 툴)이 많더군요. 그 중에서 하나 소개합니다.

이건 제가 직접 아직 써보지는 않아서, 세아슈님 블로그 포스팅을 여기에 소개합니다.

 

http://blog.naver.com/y007com/220146166293

 

 

5. Microsoft에서 Visual Studio 2015 무료 버전

 

마이크로소프트에서 드디어...... 무료로 visual studio를 배포하고 있습니다.

C언어 문법 공부용으로는 가장 좋은 것 같습니다. 인터페이스가 조금 복잡할 수 있지만,

컴파일을 하지 않아도, 실시간으로 문법체크를 하는 강력한 기능을 제공합니다.

엑셀이나, 워드 등에서 실시간으로 문법이 틀린 경우 빨간 밑줄을 자동으로 그려서 경고를 주는 것처럼

비주얼 스튜디오에서도 이러한 기능을 제공하고 있습니다.

 

https://www.visualstudio.com/ko-kr/products/visual-studio-community-vs.aspx 

Posted by 고무함지
,

링크드 리스트 자료구조에서 구현해야할 부분은 자료의 삽입, 삭제, 프린트입니다.

지난번에는 자료의 입력과 프린트만 구현했었는데, 이번엔

자료를 지우기, 자료를 특정 위치에 넣기, 자료의 순서를 반대로 하기 함수를 추가하도록 하는

코드를 올려봅니다.


그리고... 지난번에 소개한 글처럼 head node를 global값으로 사용한 방식이므로, 

아래 링크 : 링크드 리스트의 3가지 표현 방법 을 보시면, global값에서 지역 변수 등으로 사용하는 방법이 소개되니 참고하세요.

http://hamji.tistory.com/130


Null 포인터에 접근하지 않도록 하는 오류 방지 코드가 없이 기능만 구현하였기에, 참고 바랍니다.

안정성 있는 코드가 되려면, 오류 방지도 생각을 해야겠지요.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <stdio.h>
#include <stdlib.h>
 
typedef struct _Node {
    int data;
    struct _Node *next;
}Node;
 
Node *head;
 
void insert_node(int data, int n);
void delete_node(int n);
void insert_front(int data);
void insert_rear(int data);
void print_node(void);
void reverse_node(void);
 
void insert_node(int data, int n) {
    Node *node = malloc(sizeof(Node));
    node->data = data;
    node->next = NULL;
    
    if (n == 1) { // 맨앞에 넣기
        node->next = head;
        head = node;
        return;
    }
    Node *cur = head;
    
    for (int i = 0; i < n - 2; i++) {
        cur = cur->next;
    }
    node->next = cur->next;
    cur->next = node;
    return;
}
// 특정 위치에 값을 넣기 
void delete_node(int n){
    Node * cur = head;
 
    if (n == 1) {
        head = cur->next;
        free(cur);
        return;
    }
 
    for (int i = 0; i < n - 2; i++) {
        cur = cur->next;    
    }
    Node *temp = cur->next; 
    cur->next = cur->next->next;
    free(temp);
}
 // 맨 앞에 자료를 넣기
void insert_front(int data) {
    int n = 1;
    insert_node(data, n);
}
 // 맨 뒤에 자료를 넣기
void insert_rear(int data) {
    Node *node = malloc(sizeof(Node));
    node->next = NULL;
    node->data = data;
 
    Node *cur = head;
    while (cur->next != NULL) {
        cur = cur->next;
    }
    cur->next = node;
}
 
void print_node(void) {
    Node*cur = head;
 
    for (int i = 0; cur != NULL; i++) {
        printf("[%2d]->", cur->data);
        cur = cur->next;
    }
    printf("\n");
}
 // 자료의 순서를 반대로 하기
void reverse_node(void) {
    Node *current, *prev, *next;
    current = head;
    prev = NULL;
    
    while (current != NULL) {
        next = current->next;
        current->next = prev;
        prev = current;
        current = next;
    }
    head = prev;
}
 
void main(void) {
 
    insert_node(11);
    insert_node(22);
    insert_node(33);
    insert_node(44);
    print_node();
 
    insert_node(53);
    insert_node(62);
    insert_node(71);
    print_node();
    
    insert_rear(11);
    insert_rear(12);
    insert_rear(13);
    insert_rear(14);
    print_node();
 
    delete_node(1);
    delete_node(3);
    delete_node(5);
    print_node();
 
    reverse_node();
    print_node();
}
 
cs


Posted by 고무함지
,

차기 아이폰인 7에서 이어폰 잭이 빠진다는 루머나 소식들이 있네요.

그럼 어떤 형태일까 생각해봤습니다
일단 3가지 정도가 생각납니다

1. 이어폰 잭이 없으므로 무선일 것이다 => 그럼 당연히 블루투스 이어폰이 될 듯합니다.

2. 또는 라이트닝 포트와 연결 된다면 아이폰의 라이트닝 포트와 이어폰이 아날로그 신호가 아니라 디지털 신호가 될지도 모르겠습니다.
즉 오디오 정보를 이어폰에서 직접 오디오 신호로 바꿔 주겠는데 그럴 경우 아이폰이 이어폰으로 전원을 공급해주므로 아이폰의 베터리가 금방 소진 될 것 같습니다. 다만 이 경우 신규 이어폰이 나오면 구형 아이폰에서도 SW업데이트를 통해 사용이 가능하겠죠?

3. 세번째로는 라이트닝 포트를 아날로그 출력이 나오도록 새로 디자인 하는 것입니다.
이 경우 새로운 이어폰은 아이폰 7시리즈에서만 지원 하구요. 다만 라이트닝 케이블이 이오폰 케이블보다 작고 가벼운게 아니라 사용이 불편 할 것 같습니다. 애플의 철학상 심플과 간편함을 벗어나 보입니다.

그래서 제 생각에는 1번과 2번을 합친 방식일 듯 합니다.

평상시는 블루투스로 사용하다가 충전이 필요하면 아이패드 프로와 애플팬슬처럼 패드가 팬을 충전해 줍니다. 그리고 충전하는 동안에만 라이트닝 포트로 오디오 출력을 내보냅니다. (임시 방편으로)

이 경우 구형 아이폰이나 아이패드에도 지원이 되구요.

이건 애플 팬슬이 나오면서 그럼 과거 아이패드에도 지원이 되면 사려고 했던 많은 고객들이 있었듯이 분명 많은 수요가 있을 것 같구요.

그리고 항상 그렇듯 이 신형 이어폰은 애플 팬슬처럼 10만원이 넘는 고가의 제품이 될 듯 합니다.

그래서 이 신규 이어폰이 번들로 박스에 들어갈지 야플팬슬처럼 따로 구매할지는 마켓팅 정책에 따를 듯 합니다.

여하튼 이번 가을쯤에 새로 소개될 아이폰 7의 이어폰이 어떨지 궁금하네요.

분명 사운드 퀄리티를 높이기 위해 일반 블루투스+애플만의 신규 프로코콜이 추가된 이어폰이 나오지 않을 까 전망합니다.

제가 그려본 컨샙은 그래서 다음 그림처럼 나오지 않을까요. ( 발로 그린 그림 죄송합니다 ^^)


Posted by 고무함지
,