Saya mencari aplikasi yang dapat membandingkan dua sumber C ++ dan menemukan perbedaan yang berarti kode (untuk membandingkan versi yang mungkin telah diformat ulang secara berbeda). Paling tidak, sesuatu yang memiliki kemampuan untuk mengabaikan perubahan dalam ruang putih, ruang tab dan baris baru yang tidak mempengaruhi fungsi sumber (perhatikan bahwa apakah baris baru dianggap sebagai spasi putih tergantung pada bahasa , dan C dan C ++ melakukannya ). Dan, idealnya, sesuatu yang dapat mengidentifikasi dengan tepat semua perbedaan yang bermakna kode. Saya di bawah Ubuntu.
Sebagai per diff --help | grep ignore
, saya diharapkan diff -bBwZ
untuk melakukan pekerjaan dengan wajar (saya berharap untuk mendapatkan beberapa negatif palsu, untuk ditangani nanti). Namun demikian, tidak.
jika saya memiliki file berikut dengan cuplikan
test_diff1.txt
else if (prop == "P1") { return 0; }
dan test_diff2.txt
else if (prop == "P1") {
return 0;
}
kemudian
$ diff -bBwZ test_diff1.txt test_diff2.txt
1c1,3
< else if (prop == "P1") { return 0; }
---
> else if (prop == "P1") {
> return 0;
> }
bukannya hasil kosong.
Menggunakan pemformat kode sebagai "filter" pada kedua input dapat menyaring perbedaan ini, tetapi kemudian output yang dihasilkan harus diikat kembali ke input asli untuk pelaporan akhir perbedaan untuk menjaga teks dan nomor baris yang sebenarnya. Jadi tujuannya dapat dicapai tanpa memerlukan kompiler dengan benar ... Saya tidak tahu apakah ada sesuatu yang tersedia.
Bisakah tujuan tercapai diff
?
Kalau tidak, apakah ada alternatif (lebih disukai, untuk baris perintah)?
sumber
Dalam situasi yang sama, ketika saya perlu membandingkan dua
git
cabang dengan cara agnostik pemformatan kode, saya melakukan ini:membuat cabang sementara:
memformat kedua cabang menggunakan
clang-format
:melakukan perbandingan aktual:
(
-w -b
memungkinkan Anda untuk mengabaikan perbedaan ruang, untuk berjaga-jaga).Anda dapat memilih
uncrustify
lebihclang-format
(uncrustify
'smod_full_brace_if
dapat digunakan untuk menegakkan penyisipan / penghapusan kurung kurawal sekitar single-lineif
' s tubuh).Juga, jika GNU
parallel
tidak diinstal, gunakanxargs
- ia melakukan hal yang sama, tetapi sedikit lebih lama.sumber