분류 전체보기
- 리눅스 2010.05.27
- VI 단축키 2010.05.04
- warning - array subscript has type `char' 2010.01.06
- 시리얼 통신 프로그램 2009.12.02
- LINUX PPP 2009.11.06
- 리눅스 잘못 삭제로 부팅이 안될 때(grub 삭제하기) 2009.10.03
- extern 2009.07.02
- 전처리 지시어 (ex. #include, #define, .....) 2009.07.01
- 키보드 입력이 이상할 때 2009.06.29
- BCD(binary Coded Decimal) 2009.06.23
리눅스
VI 단축키
i: 끼워넣기
- 현재 커서의 앞에 끼워 넣는다.
I: 끼워넣기
- 커서가 있는 줄의 맨 앞에 끼워 넣는다.
a(append): 끼워넣기
- 커서가 있는 줄의 뒤에 끼워 넣는다.
A: 끼워넣기
- 커서가 있는 줄의 맨 앞에 끼워 넣는다.
dw: 단어 삭제
- 커서에 있는 단어 삭제
r:바꾸기
- 다른 글자로 덮어 쓴다.
R:바꾸기
- 한 글자만 다른 글자로 덮어 쓴다.
D: 삭제
- 현재 커서부터 그 줄 끝까지 삭제
dG: 삭제
- 현재 커서부터 파일의 끝까지 삭제
w: 커서 이동
- 다음 단어의 처음으로 이동
b: 커서 이동
- 현재단어의 처음으로 이동
0: 커서 이동
- 커서를 현재 행의 맨 앞으로 이동
$: 커서 이동
- 커서를 현재 행의 맨 뒤로 이동
G: 커서 이동
- 파일의 가장 끝으로 이동
gg: 커서 이동
- 파일의 가장 앞으로 이동
e filename: 파일 불러오기
- 현재 창에서 지정한 파일을 불러온다.
o: 행 삽입
- 커서가 있는 줄 아래에 행 삽입
O:행 삽입
- 커서가 있는 줄 위에 행 삽입
Ctrl+F: 화면 이동
- 화면 전진
Ctrl+B: 화면 이동
- 화면 후진
warning - array subscript has type `char'
gcc에서 배열을 읽을때, 배열을 읽는 값을 unsigned 형으로 하지 않을 경우 생기는 경고이다
char temp[20];
char arr_idx = 0;
temp[arr_idx];
라고 했을 경우, arr_idx의 값이 char형이라서 음수가 될수도 있으므로 이를 방지하기 위해
gcc에서 경고를 발생시킴
[출처] array subscript has type `char'|작성자 구차니
'language > C' 카테고리의 다른 글
bool (0) | 2011.07.07 |
---|---|
int vs char 차이 (0) | 2011.07.07 |
extern (0) | 2009.07.02 |
BCD(binary Coded Decimal) (0) | 2009.06.23 |
gcc설치하여 vim으로 편집하기 (0) | 2009.05.19 |
시리얼 통신 프로그램
LINUX PPP
참조 사이트
http://wiki.kldp.org/HOWTO/html/PPP/PPP-HOWTO.html#toc7
http://blog.naver.com/eleexpert?Redirect=Log&logNo=140104148637
http://blog.naver.com/eleexpert?Redirect=Log&logNo=140104148637
'OS > LINUX' 카테고리의 다른 글
USB MOUNT 방법 (0) | 2011.06.28 |
---|---|
CPU 점유율 확인 (0) | 2010.08.30 |
LINUX debugging (0) | 2010.08.27 |
리눅스 잘못 삭제로 부팅이 안될 때(grub 삭제하기) (0) | 2009.10.03 |
X윈도우 해상도 설정 잘못으로 화면이 보이지 않을 때 (0) | 2009.01.28 |
리눅스 잘못 삭제로 부팅이 안될 때(grub 삭제하기)
http://cafe.naver.com/asho/1772 를 보세요
http://www.sysint.no/products/Download/tabid/536/Default.aspx에서 mbrFix를 다운받으세요
'OS > LINUX' 카테고리의 다른 글
USB MOUNT 방법 (0) | 2011.06.28 |
---|---|
CPU 점유율 확인 (0) | 2010.08.30 |
LINUX debugging (0) | 2010.08.27 |
LINUX PPP (0) | 2009.11.06 |
X윈도우 해상도 설정 잘못으로 화면이 보이지 않을 때 (0) | 2009.01.28 |
extern
- 프로그래머의 [적] 전역변수 -
안녕하세요.. extern에 대해 고민이 많으시군요..
한때, 저도 고민 많이 햇답니다.. extern << 이넘의 실체는?
전 이렇게 분류 하고 싶네요..
1. static 변수... 즉
void main 위에 위치하는 넘까지 포함해서..
-- 전.역.변.수 -- 라고 부르고 싶네요..
2. 지역변수
{ } 안에 위치한넘... ( ) 포함해서.
-- 지.역.변.수 라고 부르고 싶네요.
3. 광역변수
모든 프로젝트에 위치한넘.
전역변수는 에서는 선언된 이후라면 어디든 사용이 가능하죠..
하지만.. .h니 .c 니 이렇게 여러 프로젝트 단위로 나뉘어진 변수라면..
상.당.히 골치 아픕니다...
먼저 컴파일러가 되어서 생각 해보죠..
------- 1.c
int a; // a가 선언 되어있네?
void main()
{
a = 10; // 그래 a값이10 이구나.. 좋아. 넣어주지
}
// 컴파일 완료.. 아자 이상없구나~!!
-------- 2.c
// 새로 컴파일을 시작하네?
int sam()
{
a = 10; // 아자.. 이건 어디서 굴러먹다온 뼉다그야.. ㅡㅡ 젝힐.....
}
// 몰라 배째 error
그럼 광역변수는 어케 되는걸까 잠시 보죠..
위의 예를 가지고 하죠
프로그래머 : 난 a를 광역으로 쓰고 싶다그.....
PC : 그럼 광역으로 쓴다는 걸 알려줘 어느넘인지 모르겠어..
프로그래머 : 알따 헤더파일을 만드러주지 ㅡㅡ
------------ 1.h
extern int a; // a너는 누구라도 쓸수 있는거야~~ 앙?
------- 1.c
#include "1.h"
int a; // a가 선언 되어있네? 메모리에 공간을 잡자..
void main()
{
a = 10; // 그래 a값이10 이구나.. 좋아. 넣어주지
}
// 컴파일 완료.. 아자 이상없구나~!!
-------- 2.c
#include "1.h"
// 새로 컴파일을 시작하네?
int sam()
{
a = 20; // 어라? a가.. 전체적으로 사용하네.. (메모리 공간이 잡혀있나?) 오.. 잡혀있다.
}
// 좋아 굳굳굳...
------------ 즉 extern 선언은 컴파일러가 알아 듣기 위한 최소한의 요구 사항입니다.
아니면, 해당 변수를 찾을수가 없어서. 난리 치는거죠.. ㅠㅠ
이보다.. 간결한 방법은.. ^^;;;;;;; 쓰지 않고 지역 변수를 사용 하는 방법 입니다만...
모바일 프로그램 같은.. 속도를 요하는 프로그래밍에서는 변수를 지역으로 잡아서 새로이 생성 하는데 리스크가 너무 크다고 생각합니다.
int sam() // 100번만 호출되도
{
int a; // 100번 생성해야하니 원~!!!
}
그래서 어쩔수 없이 전역 혹은 광역변수를 사용 하지요..
또한,, 모바일 OS 포팅 같이 꽤 방대한 분량의 코드에서는 전역변수 저넘이 어느 타이밍에서 어떤 값으로 변환되는지 알기가 쉽지 않아서.. 분담코드 작성에는 매.우. 비효율적입니다...
----------
아.. 이 난관을 어케 해야하노 ㅠㅠ.....
'language > C' 카테고리의 다른 글
int vs char 차이 (0) | 2011.07.07 |
---|---|
warning - array subscript has type `char' (0) | 2010.01.06 |
BCD(binary Coded Decimal) (0) | 2009.06.23 |
gcc설치하여 vim으로 편집하기 (0) | 2009.05.19 |
continue 와 break 차이 (0) | 2009.05.13 |
전처리 지시어 (ex. #include, #define, .....)
전처리 지시어는 컴파일 직전에 처리된다.
#include
ex> #include <stdio.h>
이 지시어는 헤더 파일을 지시어가 들어가 있는 위치에 헤더파일을 포함시키는 것이다. < >괄호를 사용하면 표준 헤더 파일 디렉토리에서 지정한 파일을 찾는다. 같은 폴더일 경우에는 " "괄호를 사용한다. 물론 <>, ""의경우 어떤 것을 사용해도 상관은 없다 해당 폴더를 검색해서 해당 파일이 없다면 다른 폴더도 검색하기 때문이다.
#define
ex> #define NUM 1
(치환전) int Arr[NUM]; -> (치환후) int Arr[1];
ex> #define TEXT "전처리 지시어" (치환전) printf("%s", TEXT); -> (치환후) printf("%s", "전처리 지시어"); 또한 정수형과 같이 문자열로도 치환이 가능하다. ex> #define MAX #ifdef MAX //MAX가 define되어 있다면 해당 코드가 컴파일 된다. #else //MAX가 define되어 있지 않다면 해당 코드가 컴파일 된다. #endif 또한 MAX로 정의는 하지만 대치시키지는 않도록 할수도 있다. 이것은 #ifdef ~ #elif ~ #else ~ #endif 문과 같이 사용되면 상당히 유용하게 사용된다. 이런것을 조건부 컴파일이라 한다. #undef ex> #undef MAX //이 아래 부터서는 MAX는 정의 되어 있지 않게 된다. #ifdef MAX //MAX가 undef 되어 코드를 컴파일하지 않는다. #else //MAX가 undef 되어 코드를 컴파일 한다. #endif 이 지시어는 define으로 정의된 것을 해제하는 것으로 해당 코드 아래 부터서는 MAX의 정의가 되어 있지 않은 것으로 간주 한다. ex> #define SIZE 100 #undef SIZE #if, #else, #endif ex> #if 0 //if 가 0 이기 때문에 이 코드는 컴파일 되지 않는다. #else //if 가 0 이기 때문에 이 코드는 컴파일 된다. #endif #if 0 //대용량 코드 #endif 또한 대용량코드를 주석 처리를 하지 않고 한번에 컴파일에서 삭제가 가능하다는 것이다. #ifdef, #elif ex> #ifdef MAX1 //MAX1 이 정의 되어 있다면 이곳의 코드를 컴파일 한다. #elif MAX2 //MAX1 이 정의 되어 있지않고 MAX2가 정의 되어 있다면 이곳의 코드를 컴파일 한다. #else //MAX1 과 MAX2 가 정의 되어 있지 않다면 이곳의 코드를 컴파일 한다. #endif 이 지시어는 MAX1 과 MAX2가 정의(Define)되었는지 체크하고 그에 해당하는 코드를 컴파일하게 된다. #ifndef ex> #ifndef FILENAME_H #define FILENAME_H //코드 #endif 이 지시어는 ifdef와 반대로 해당 수식어(FILENAME_H)가 정의 되어 있지 않다면 참으로 #endif 까지의 코드를 컴파일 하게 된다. 또한 이것은 헤더 파일이 중복되어 선언 되지 않도록 할때 자주 사용 되는 방식이다. defined() ex> #if defined(DEBUG1) || defined(DEBUG2) || defined(DEBUG3) #define GEN_DEBUG(x) {printf x;} #else #define GEN_DEBUG(x) #endif
이 지시어는 해당디파인이 되어있다면 1을 아니면 0을 반환한다. 일반 if문과 같이 사용하여 DEBUG1, DEBUG2, DEBUG3중 하나만 Define되어 있다면 참으로 인식하여 컴파일을 하게 된다. 이것은 디버그를 사용할때 자주 쓰이는 방식이다. #error ex> #if !defined(__cplusplus) #error C++ compiler required. #endif
이 지시어는 전처리기가 해당 코드를 실행하게 되면 에러 메시지를 출력시키고 컴파일 작업을 하지 않도록 만든다.
#line
ex>
x = 1; //3번 라인 #line 100 "main.c" //4번 라인 y = 1; //100번 라인 이 지시어는 사용자를 위한 문장이기 보다는 컴파일러 자체를 위한 프리프로세서문이다. 실제 컴파일 에러가나면 line을 거치면서 5번 라인이 아니라 100라인에서 에러가 난것으로 나타난다.
기타 전처리기 사용방법 매크로 함수(Macro function) 매크로 함수도 전처리기로 사용할 수 있다. 다만 디버깅이 힘들어 많이 사용되지 않는다.
#define CUBE(x) ((x)*(x)*(x)) (치환전) y = CUBE(x); -> (치환후) y = (x) * (x) * (x); 매크로 함수를 사용한다면 ()를 남발하는 습관을 키워야 한다. ex> #define CUBE(x) (x*x*x) (치환전) y = CUBE(3+4); -> (치환후) y = (3+4 * 3+4 * 3+4); 위와 같은 경우 우리가 생각한 값은 나오지 않는다. 문자열 조작 ex> #define SAY(x) printf(#x) (치환전) SAY(Hello, world!); -> (치환후) printf(“Hello, world!”);
i = SIZE;
#define SIZE 200
j = SIZE;
위와 같이 식별자 앞에 # 를 붙이게 되면 자동으로 “x” 와 같이 “”로 둘러 싸 준다.
## 는 두 개의 문자열을 결합해 준다. 위와 같이 사용하면 PrintOne 이라는 문자열로 대치되고 Print(Two) 는 PrintTwo 라는 문자열로 대치된다.
assert()
#ifndef DEBUG
#define ASSERT(x)
#else
#define ASSERT(x) \
if ( ! (x) ) \
{ \
printf(#x); \
printf(“ is NULL on line %d in file %s”, __LINE__, __FILE__); \
}
#endif
DEBUG 정의에 따라 디버그때만 코드가 생성되고 릴리즈시에는 코드가 생성되지 않게 할 수 있는 것이다.
또한 여러 줄이 필요할 때는 \ 가 사용되었다는 것에 유의하자.
ex> /* VC++6.0의 asert() */
#define _ASSERT(expr) \
do { if (!(expr) && \
(1 == _CrtDbgReport(_CRT_ASSERT, __FILE__, __LINE__, NULL, NULL))) \ //Debug 정보를 출력
_CrtDbgBreak(); } while (0) //자동으로 Debug Break를 잡아 준다. 이것 만으로도 유용하게 사용이 가능하다.
매크로명 타입 설명 __DATE__ 문자열 컴파일하는 날짜 __TIME__ 문자열 컴파일하는 시간 __LINE__ 컴파일하고 있는 줄 번호 __FILE__ 문자열 현재 컴파일 하고 있는 파일의 이름 __TIMESTAMP__ 문자열 소스 파일의 최종 변경 날짜와 시간
printf("%d\n", __LINE__); //컴파일시의 해당라인 번호로 치환된다. - 1234
printf("%s\n", __FILE__); //컴파일시의 해당파일Path로 치환된다. - c:\main.c
printf("%s\n", __DATE__); //컴파일시의 날짜로 치환된다. - Jan 1 2009 / 월.일.년
printf("%s\n", __TIME__); //컴파일시의 시간으로 치환된다. - 15:31:17 / 24시간:분:초
printf("%s\n", __TIMESTAMP__); //컴파일시의 날짜와 시간으로 치환된다. - Mon Jan 1 15:31:17 2009 / 요일.월.일.24시간:분:초.년
키보드 입력이 이상할 때
주의(caution) : 사용하시는 키보드가 반드시 USB 방식 이여야 합니다.
ps/2 방식은 하지마세요. 윈도우를 다시 깔아야 하는 사태가 발생합니다.
xp 자동 설치시 USB 106 키보드의 오른쪽 알트(alt), 컨트롤(ctrl) 입력이 안되는 경우가 있는데,
1) 먼저 첨부한 파일을 다운 받으신 뒤 압축을 풀어서 C:\WINDOWS\system32\drivers
경로로 저장하세요.
2) [제어판] -> 키보드 -> 하드웨어 탭 -> 속성 -> 드라이버 탭 -> 드라이버 업데이트
-> 아니오, 지금연결 안함 -> 목록 또는 특정 위치에서 설치
-> 검색 안함, 설치할 드라이버를 직접 선택 -> 호환 가능한 하드웨어 표시 (체크 해제) -> 제조업체 (표준 키보드 선택)
-> 모델은 HID 키보드 장치 버전: 5.1.2600...... 을 선택 ->
다음(N) - 다음(N) 하면 된다.
그리고 반드시 다시시작(재부팅)하셔야 합니다.
도움 되셨으면 덧글들 부탁드립니다.
'컴퓨터 팁' 카테고리의 다른 글
virtual pc com 설정 (0) | 2013.07.16 |
---|---|
webzip (0) | 2011.07.12 |
flec006...CPU 사용 100% 바이러스 치료 방법 (0) | 2008.10.09 |
윈도우 계열 컴퓨터 단축키 (0) | 2008.10.09 |
프린터 인쇄 취소가 안되는 경우 (0) | 2008.09.10 |
BCD(binary Coded Decimal)
'language > C' 카테고리의 다른 글
warning - array subscript has type `char' (0) | 2010.01.06 |
---|---|
extern (0) | 2009.07.02 |
gcc설치하여 vim으로 편집하기 (0) | 2009.05.19 |
continue 와 break 차이 (0) | 2009.05.13 |
const와 static (0) | 2009.05.05 |