Sangat sering saya masuk ke kode C di mana printf
format string dimulai dengan \n
:
printf ("\ nHello");
Ini menurut saya adalah hal yang menjengkelkan yang tidak menawarkan keuntungan (lebih banyak kerugian!) Sehubungan dengan pencetakan "Hello\n"
:
- Jika baris yang dicetak pertama dimulai dengan
'\n'
, output program akan dimulai dengan baris kosong (tidak berguna) - Jika baris yang dicetak terakhir tidak berakhir dengan
'\n'
, output program tidak akan berakhir dengan baris baru (berguna saat membaca output pada terminal) - Pada sebagian besar terminal (on line buffered stream secara umum), output akan memerah ketika
'\n'
ditemui, sehingga garis yang tidak berakhir dengan'\n'
dapat ditampilkan di layar jauh setelah itu benarprintf
- benar sudah d (atau mungkin tidak pernah, jika aliran tidak pernah memerah , misalnya jika program macet)
Jadi, mengapa orang suka ini?
fflush()
.Jawaban:
Secara umum, ini dilakukan untuk memastikan bahwa pernyataan tersebut dicetak pada baris berikutnya. Jika dilakukan di akhir baris, efek yang sama dapat diturunkan. Ini benar-benar konsekuensi kecil.
Pembaruan : Selama Anda memilih satu cara dan tetap menggunakannya, itu tidak akan menjadi masalah sedikit pun. Jika Anda benar-benar khawatir maka ketikkan semua pernyataan Anda sebagai "\ nHalo \ n". Jika Anda memiliki beberapa baris yang dihancurkan bersama-sama, maka ini benar-benar tidak sulit untuk memperbaiki "bug". Kembali saja dan ubah pernyataan yang menyinggung itu.
sumber
"Hello2\n"
) dapat berakhir di baris yang sama dengan pesan terakhir Anda (berakhir di"\nHelloHello2\n"
): bukankah ini seburuk milik Andamessage on the same line of the previous one (eg: "\nPrevious-messageHello\n"
)? Jika dua skenario ini buruk dengan cara yang sama, seorang programmer / proyek harus mengadopsi standar (misalnya: selalu meletakkan'\n'
di awal, atau di akhir), tapi saya tidak bisa melihat apa keuntungan yang Anda miliki dengan meletakkan'\n'
di awal pesan Anda ...Dua kata: preferensi pribadi. Dalam skema besar, saya pikir ini tidak terlalu penting. Jika Anda terganggu olehnya, tanyakan pada pembuat kode ini mengapa mereka menulisnya seperti itu. Anda mungkin mendapatkan beberapa jawaban menarik.
Saya lebih suka semua karakter baris baru saya di akhir setiap baris.
sumber
Sebagai seseorang yang menggunakan idiom ini dalam beberapa konteks - meskipun saya biasanya meletakkan
\n
di akhir untuk memastikan pembilasan -, saya bisa menawarkan pembenaran: Saya cenderung menggunakan ini ketika format banyak baris, terutama jika dimulai dengan baris kosong, sehingga\n
s disejajarkan. Ini berarti bahwa agak mudah untuk (a) memeriksa bahwa semua baris memang menyertakan a\n
atau (b) untuk mengabaikannya sebagai pemberat, dan cukup membaca teks dalam baris. Dalam situasi ini sebenarnya terlihat lebih rapi bagi saya juga, tetapi saya menemukan semua manfaat ini kecil.Pendekatan alternatif untuk meminimalkan ballast sintaksis adalah dengan menggunakan string literal termasuk baris baru, tetapi 6.4.5 dalam standar C11 melarang mereka, jadi Anda harus berbicara dengan baik kepada kompiler Anda dan berpikir dengan hati-hati tentang apa yang akan dilakukan.
sumber
Alasan yang tidak disebutkan (kecuali saya melewatkannya), adalah bahwa beberapa program CLI akan menggunakan '\ r' untuk memperbarui baris berulang kali. Misalnya dengan status.
Baris berikutnya akan membutuhkan baris baru untuk mendapatkan kursor ke, baik, baris berikutnya (baru).
Contoh lain (sangat buruk) adalah ketika programmer menyadari bahwa banyak program dapat menulis ke terminal yang sama. Dalam kasus kacau ini, ada kemungkinan bahwa beberapa perintah akan dikenakan oleh pemimpin '\ n' membilas teks buffered sebelum menulis lebih banyak dan mungkin mengacak output dari penulisan. Tetapi pemesanan semacam itu tidak dijamin, dan cepat atau lambat proses lainnya akan menerobos masuk dan merusak barang-barang. Jangan lakukan ini pada apa pun yang Anda ingin pamerkan kepada ibumu!
Saya akan mencoba untuk menjaga contoh di atas untuk tujuan debugging, dan tidak membuat pengguna selain hasil Anda sendiri. Ini akan berlaku dengan beberapa tugas yang tidak disinkronkan menulis ke file yang sama (semoga debug).
Kasus menggunakan 'r' untuk menulis lebih dari satu baris teks di layar, bagaimanapun, tidak jarang di dunia CLI.
Bagaimanapun, banyak hal terjadi.
sumber