일반적인 문서에서 특정 문자열 을 포함한 문서와 그 위치 보여주기
$ grep -r abc *
grep
(잡아 내자)
-r
(현재 위치 포함 하위 폴더 까지 싹다)
abc
(abc 라고 적힌 곳을)
*
(모든 파일)
현재 폴더 위치 부터 하위 폴더 까지, 모든 txt파일에서 철수 라는 문자열을 찾고 싶다면
grep -r 철수 *.txt
----------------------------------
코드에서 함수 찾기
cscope 를 이용하여 찾기
cscope를 깔자
함수가 있을 법한 위치에서
$ cscope -R
후
Find this C symbol: 선언된녀석들(맞나?)찾기
Find this global definition: 전역에서 선언된 녀석찾기
Find functions called by this function: 여기적는 함수명 속에 들어있는 모든 함수
Find functions calling this function: 여기적는 함수명 을 부르는 함수
Find this text string: 문자열 찾기
Change this text string: 바꾸자
Find this egrep pattern: 읭?
Find this file: 파일이름 찾기?
Find files #including this file: 그파일에 참조된 파일들
Find assignments to this symbol: 의의응?
ctags를 이용 하여 찾기
ctags를 깔자
$ ctags -R
vim -t 함수명
2015년 1월 5일 월요일
^M ^L 문자 없애기
linux에서 source insight라는 윈도우 개발 프로그램에서 만든 코드를 불러오면
^M과 ^L같은 특수 문자가 찍히고
cscope 에도 내용을 읽을 수 가 없게 된다.
그럴 땐
해당파일(aaa.c라고 할 때)
리눅스에서
dos2unix aaa.c
라고 하면 linux용으로 파일이 바껴 cscope도 잘된다
^M과 ^L같은 특수 문자가 찍히고
cscope 에도 내용을 읽을 수 가 없게 된다.
그럴 땐
해당파일(aaa.c라고 할 때)
리눅스에서
dos2unix aaa.c
라고 하면 linux용으로 파일이 바껴 cscope도 잘된다
2014년 6월 24일 화요일
C 언어 에러 삽질 방지
오늘부터 자주 보는 에러에 대한 나의 삽질내역을 기록하겠다.
warning: implicit declaration of function '함수'
1.발생 이유: 함수선언을 다른 곳, 현재 코드보다 아래에 해두고 가져다 쓸 때
2.해결방법 : 사용하는 위치 보다 아래에 정의된 함수를 가져다 쓸 때는 해당 파일 또는 include 하는 헤더파일에다가 함수 원형을 선언해두자. 다른 파일에 있다면 extern 하여 사용 하자.
3.여담: 워닝인 이유는 컴파일러가 알아서 찾아주기때문. 컴파일러가 구리면 error로 띄워주는듯 하다.
warning: nested extern declaration of '함수명'
1.발생이유: 이제껏 상위 implicit declaration of function 의 여파로 생겨 났던 것 밖에 없다.
2.해결방법 : 위의 워닝을 해결하라
3.여담: 찾아도 잘안나오네 ㅠㅠ
warning: label 'defualt' defined but not used
1.발생 이유: 스위치 문에서 default를 defualt로 적어서 나는 워닝
2.해결방법 : 오타를 수정하자 무지막지하게 부끄러운 일이다..(*-_-*)
3.여담: 이걸 상사에게 물어봤다가 얼굴이 빨개졌다. 부끄러워서...
warning: return makes integer from pointer without a cast
1.발생 이유: 리턴 값이 int인 함수내에서 다른 자료형으로 리턴을 했을 때
warning: implicit declaration of function '함수'
1.발생 이유: 함수선언을 다른 곳, 현재 코드보다 아래에 해두고 가져다 쓸 때
2.해결방법 : 사용하는 위치 보다 아래에 정의된 함수를 가져다 쓸 때는 해당 파일 또는 include 하는 헤더파일에다가 함수 원형을 선언해두자. 다른 파일에 있다면 extern 하여 사용 하자.
3.여담: 워닝인 이유는 컴파일러가 알아서 찾아주기때문. 컴파일러가 구리면 error로 띄워주는듯 하다.
warning: nested extern declaration of '함수명'
1.발생이유: 이제껏 상위 implicit declaration of function 의 여파로 생겨 났던 것 밖에 없다.
2.해결방법 : 위의 워닝을 해결하라
3.여담: 찾아도 잘안나오네 ㅠㅠ
warning: label 'defualt' defined but not used
1.발생 이유: 스위치 문에서 default를 defualt로 적어서 나는 워닝
2.해결방법 : 오타를 수정하자 무지막지하게 부끄러운 일이다..(*-_-*)
3.여담: 이걸 상사에게 물어봤다가 얼굴이 빨개졌다. 부끄러워서...
warning: return makes integer from pointer without a cast
1.발생 이유: 리턴 값이 int인 함수내에서 다른 자료형으로 리턴을 했을 때
2.해결방법 : 꼭 리턴해야 하는 의미있는 값일경우(unsigned 라던지) return (int)변수명;
return NULL; <- 이런걸 적어놨다면 그냥 -1로 리턴하고 해당 함수 콜 하는 부분 다음에
if(ret < 0) 를 사용하여 예외처리를 하자(ret는 보통 return 의 줄임말. return 예약어니까 변수명으로 쓸수 없다)
3.여담: 막코딩하다보니 return NULL; 해놓고 바로아래 int형으로 리턴을 적어뒀더라....
warning: pointer targets in passing argument 2 of 'sprintf' differ in signedness
1.발생 이유: sprintf라는 함수를 사용하는 데 안에 들어가는 아규먼트(파라미터?)가 부호값을 상실했네
sprintf(char * a, const char *b , ....) 뭐 이런식인데 sprintf(char * a,const u_int8_t *b , ....)
이렇게 넣은거
2.해결방법 : 변수를 바로 쑤셔박지말고 sprintf(받는놈 , " % 자료형형형", *b) 요런식으로 바끄야할듯
warning: type defaults to 'int' in declaration of '함수명'
1.발생 이유: 필자는 extern 함수 여기서 에러가 났엇다. 함수 원형은 int형인데 왜 int 안적냐는 워닝
2.해결방법: 컴파일러가 모르게 extern int 함수 이렇게 바꾸고 모르는척 컴파일다시하자
warning: case label value exceeds maximum value for type
1.발생 이유: switch 비교문에서 case 가 음수로 가는 경우
2.해결방법: 음수 비교를 하지 말거나, 나는 음수를 안쓴다 싶으면 unsigned를 넣든지
계속 추가할 계획이다. 시간남을때..
return NULL; <- 이런걸 적어놨다면 그냥 -1로 리턴하고 해당 함수 콜 하는 부분 다음에
if(ret < 0) 를 사용하여 예외처리를 하자(ret는 보통 return 의 줄임말. return 예약어니까 변수명으로 쓸수 없다)
3.여담: 막코딩하다보니 return NULL; 해놓고 바로아래 int형으로 리턴을 적어뒀더라....
warning: pointer targets in passing argument 2 of 'sprintf' differ in signedness
1.발생 이유: sprintf라는 함수를 사용하는 데 안에 들어가는 아규먼트(파라미터?)가 부호값을 상실했네
sprintf(char * a, const char *b , ....) 뭐 이런식인데 sprintf(char * a,const u_int8_t *b , ....)
이렇게 넣은거
2.해결방법 : 변수를 바로 쑤셔박지말고 sprintf(받는놈 , " % 자료형형형", *b) 요런식으로 바끄야할듯
warning: type defaults to 'int' in declaration of '함수명'
1.발생 이유: 필자는 extern 함수 여기서 에러가 났엇다. 함수 원형은 int형인데 왜 int 안적냐는 워닝
2.해결방법: 컴파일러가 모르게 extern int 함수 이렇게 바꾸고 모르는척 컴파일다시하자
warning: case label value exceeds maximum value for type
1.발생 이유: switch 비교문에서 case 가 음수로 가는 경우
2.해결방법: 음수 비교를 하지 말거나, 나는 음수를 안쓴다 싶으면 unsigned를 넣든지
계속 추가할 계획이다. 시간남을때..
2013년 12월 27일 금요일
피드 구독하기:
글 (Atom)