C소수 중에서 주석 // 을 /* ~ */ 로 변경하는 쉬운 방법
글쓴이: neohwang / 작성시간: 화, 2007/02/20 - 9:28오전
안녕하세요..
급히 도움 좀 부탁드립니다.
C로 작성된 소스코드 인데요.. 주석이 // 과 /*~*/로 섞여서 작성되어 있습니다.
IBM-AIX에서 cc로 컴파일 할려고 하니.. // 형식의 주석이 안 먹히더라구요..
그래서.. // 형식의 주석을 /* ~ */로 변경할려고 하는데요..
소스파일도 많고, 크기도 커서 너무 어렵네요..
이것을 어떻게 손쉽게 변경하는 방법 없나요?
현재 edit plus로 나름대로 정규식을 주어서 하는데.. 제대로 안되네요...
좋은 방법좀 부탁드립니다.
감사합니다.
Forums:


C99 호환 컴파일러를
C99 호환 컴파일러를 사용하시거나, C++ 컴파일러를 사용하셔도 됩니다.
하지만 꼭 IBM-AIX cc로 컴파일해야 하는 경우...
저도 잘 모르겠습니...(*shot*)
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
무식하게..
그냥 때려 박으니 되는군요-_-
s/\/\/\(.*\)$/\/\* \1 \*\//g
vi에서의 정규표현식입니다.
'//'부터 줄의 끝까지를 지정한다음에 그 부분을 /* ~ */로 감쌌습니다.
답변 감사드립니다.
완벽하진 않습니다만.. 이렇게 우선 프로그램 만들어서 해결했습니다.
테스트 해본 결과 따옴표 속에 들어가는 주석에서는 문제가 발생합니다.
여러 소스코드중 한라인에서만 다행이 발생하여.. 이 프로그램을 돌린후 그 부분만 손으로 했습니다..
참고삼아 올려드립니다.
#include <stdio.h> int main(int argc, char *argv[]) { FILE *in; FILE *out; char backup[300]; char buff[5000]; char *s; char *p; char *t; char *q; int i,len; int star = 0; if(argc != 2) { printf("error argument\n"); return 0; } // file backup if((in=fopen(argv[1],"rb"))==NULL) { printf("error read file open\n"); return 0; } sprintf(backup,"%s.bak",argv[1]); if((out=fopen(backup,"wb"))==NULL) { printf("error write file open\n"); fclose(in); return 0; } while(fgets(buff,sizeof(buff), in) != NULL) fputs(buff,out); fclose(out); fclose(in); // 작업시작 if((in=fopen(backup,"rb"))==NULL) { printf("error read file open\n"); return 0; } if((out=fopen(argv[1],"wb"))==NULL) { printf("error write file open\n"); fclose(in); return 0; } while(fgets(buff,sizeof(buff),in) != NULL) { s = buff; cmt : // "*/" 처리 if(star == 1) { len = strlen(s); p = strstr(s,"*/"); if(!p) { fputs(s,out); continue; } for(i=0 ; i<len ; i++) { fputc((int)(*(s+i)), out); if(p == s+i) { fputc((int)(*(s+i+1)), out); s = s+i+2; star = 0; break; } } } // "/*" 처리 p = strstr(s,"//"); t = strstr(s,"/*"); if((p && t&& p>t) || t && !p ) { star = 1; len = strlen(s); q = strstr(t,"*/"); if(q) { for(i=0 ; i<len ; i++) { fputc((int)(*(s+i)), out); if(q == s+i) { fputc((int)(*(s+i+1)), out); s = s+i+2; goto cmt; } } } fputs(s,out); continue; } // "//"처리 if(!p) { fputs(s,out); continue; } len = strlen(s); for(i=0 ; i<len ; i++) { if(p == s+i) fputs("/*", out); if(*(s+i)== 0x0a || *(s+i) == 0x0d) { fputs("*/\n", out); continue; } fputc((int)(*(s+i)), out); } } fclose(out); fclose(in); printf("ok :: %s\n", argv[1]); return 0; }저기여..
소스코드 어떻게 올리죠?
<code></code>로
<code></code>로 감싸시면 됩니다.
댓글 달기