C 프로그램의 두 파일이 있습니다. 나는 둘 다 꽤 같은 버전에 속해 있다고 생각한다. "diff"를 사용하면 차이가 어디 있는지 알 수 있었을 것입니다. 아마 3 줄로 구성되어있을 것입니다. 문제는 두 번째 파일이 완전히 다른 입 다듬기, 괄호 스타일 등을 사용하는 다른 프로그래머에게 주어졌지만 아마 찾을 필요가있는 세 줄만 변경한다는 것입니다. "diff"를 사용하면 많은 차이가 있습니다. 그래서 내 질문은,이 상황에서 코드의 관점에서 차이점을 어떻게 알 수 있습니까? 두 파일에 동일한 서식을 적용한 다음 "diff"를 사용하려고했지만 내 경우에는 작동하지 않습니다.형식이 다른 두 코드 버전의 차이점
답변
SmartDifferencer 프로그램을 사용할 수 있습니다. 두 가지 코드 파일을 실제 파서로 구문 분석하여 형식 및 배치 또는 주석 변경과 완전히 독립적 인 구문 파일 트리를 비교 한 다음 편집 작업 (복사, 이동, 삽입, 삭제 등)에 대한 변경 사항을보고함으로써구문 트리를 비교합니다. 블록 내에서 변수 변경 가능). 따라서 라인 대신에 랭글러 구조의 차이점을 볼 수 있습니다. 종종 차이점이 훨씬 적습니다. 실제 리터럴 값이 같으면 숫자 기수 및 문자열 이스케이프의 변경 사항도 무시합니다.
C# 및 Java와 같은 언어의 경우 매우 잘 작동합니다. C는 좀 더 문제가 있습니다. 사람들이 모든 정의와 #include 등을 알지 못하면 파싱 할 수없는 까다로운 C 코드를 작성하기 때문에 일부 파일은 처리되지 않으므로 아마도 기존의 diff로 대체 될 것입니다. 또 다른 저자가 제안한 포맷터이지만, 여전히 라인 diff 만 제공합니다. C++은 틀림없이 C와 동일한 문제를 가지고 있지만, 실제로 C++ 코드는 거의 악의적이지 않습니다.
pretty-printer을 사용하여 두 파일의 서식을 지정한 다음 diff를 수행하십시오.
어느 하나를 권장합니까? – flow
Code :: Blocks API에서 AStyle 플러그인을 사용하는 것이 좋습니다. 대접을하고, 상당히 사용자 정의 할 수 있습니다. Visual Studio에서도 자동 서식을 지정할 수 있습니다. 당신이 선택한 편집기에 적합한 플러그인을 찾을 수 있을지도 모릅니다. –
diff
은 줄을 비교할 때 모든 공백을 무시하도록 지시하는 -w
옵션을 사용합니다. 그러나 한 파일의 한 줄을 다른 파일의 두 줄 이상으로 나눌 수 있다면 @Jeff Foster의 제안을 사용하는 것이 더 나을 것입니다.
- 1. IE6 버전의 차이점
- 2. MySQL 릴리스 버전의 차이점
- 3. 한 버전의 프로젝트에서 다른 버전의 코드 줄 수를 어떻게 비교합니까?
- 4. MATLAB 4.2c와 최신 버전의 차이점
- 5. .NET 버전의 차이점 (주로 C#)
- 6. 현지화 된 버전의 .NET Framework에서 차이점
- 7. Eclipse에서 차이점 두 메소드
- 8. 두 버전의 동시 사용하기
- 9. 두 파일의 차이점/병합
- 10. 왜 자바를 두 번 인쇄 형식이 코드 및 String.format를 사용하거나하지
- 11. 다른 버전의 개체 동기화
- 12. ASP.NET과 .NET 프레임 워크 버전의 차이점
- 13. 코드와 코드 뒤의 차이점
- 14. LINQ의 두 위치 차이점
- 15. 두 날짜의 차이점
- 16. 이 두 구문의 차이점
- 17. 두 변수의 차이점
- 18. MySQL의 두 날짜 차이점
- 19. MySQL의 두 시리즈의 차이점
- 20. 두 JavaScript 패턴의 차이점
- 21. 두 DLL 선언의 차이점
- 22. DD 형식이 다른 MD5입니까?
- 23. 다른 버전의 다른 파일 확장자
- 24. 하나의 파일에 두 개의 서로 다른 파일 형식이 있습니까?
- 25. 다른 버전의 Python에 대한 다른 버전의 패키지 업로드
- 26. 다른 버전의 다중 컨텍스트
- 27. 다른 버전의 Mercurial repo
- 28. 다른 버전의 C++ 라이브러리
- 29. android 다른 버전의 호환성
- 30. 다른 Python 버전의 Django
오픈 소스에 상응하는 일부 기능을 알고 있습니까? – flow
내가 아는 한, 오픈 소스에 상응하는 것은 없습니다. 무료 버전이 과거에 SO보다 더 많은 답변이 없는지 묻는 질문입니다. http://stackoverflow.com/questions/3829453/is-there-any-free-ast-diff-tool을 참조하십시오. 그러한 제품 라인을 갖추려면 언어 정확도가 높은 파서와 유용한 AST diffing 알고리즘 (AFAIK, 연구 논문으로 만 출판 됨)의 실제 구현이라는 두 가지 희귀 한 결과의 합류가 필요합니다. 우리는 두 가지 모두를 가지고 있습니다. 후자는 논문에서 어떤 진지한 생각과 땀으로 위와 넘어 졌기 때문입니다. –