레이블이 개발 팁인 게시물을 표시합니다. 모든 게시물 표시
레이블이 개발 팁인 게시물을 표시합니다. 모든 게시물 표시

2015년 1월 5일 월요일

코드에서 함수 찾기, 패턴 찾기, 문서에서 패턴 찾기

일반적인 문서에서 특정 문자열 을 포함한 문서와 그 위치 보여주기

$ 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 함수명




^M ^L 문자 없애기

linux에서 source insight라는 윈도우 개발 프로그램에서 만든 코드를 불러오면
^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인 함수내에서 다른 자료형으로 리턴을 했을 때
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를 넣든지


계속 추가할 계획이다. 시간남을때..





2013년 12월 27일 금요일

pintf() 문이 한번에 나온다!!

그럴땐 printf() 밑에 fflush(stdout);을 붙여보아요..
printf 문이 버퍼링을 하고 있기 때문이래요.

http://kldp.org/node/141240