Tanda kurung di sekitar nilai pengembalian di C

Cukup sering dalam kode ANSI C saya dapat melihat tanda kurung di sekeliling nilai pengembalian tunggal.

Seperti ini:-

int foo(int x) {
  if (x)
    return (-1);
  else
    return (0);
}

Mengapa menggunakan () di sekitar nilai kembalian dalam kasus tersebut? Ada ide? Saya tidak melihat alasan untuk itu.


person Tooony    schedule 02.10.2008    source sumber
comment
Sepertinya pemanggilan fungsi seperti itu ;-).   -  person Toon Krijthe    schedule 02.10.2008
comment
Namun, return bukanlah pemanggilan fungsi, kecuali Anda seorang Perencana. :-P   -  person Chris Jester-Young    schedule 02.10.2008
comment
Tooony: Saya juga ingin tahu mengapa orang menaruh tanda kurung yang tidak diperlukan pada sizeof!   -  person Chris Jester-Young    schedule 02.10.2008
comment
Meskipun pembenaran ergonomis post hoc sering kali ditawarkan untuk kebiasaan tersebut, ada baiknya melihat bahasa modern yang memiliki pernyataan pengembalian dan menanyakan apakah konvensi yang sama ada. AFAIK jawabannya adalah TIDAK. Jawaban User10392 menarik karena memberikan manfaat khusus C yang berasal dari kebiasaan tersebut.   -  person AmigoNico    schedule 19.06.2013
comment
Kemungkinan duplikat Apakah tanda kurung di sekitar hasil signifikan dalam pengembalian pernyataan?   -  person phuclv    schedule 17.05.2017


Jawaban (11)


Sebenarnya tidak ada alasan... itu hanya konvensi lama.

Untuk menghemat ruang, pemrogram sering kali mengerjakan perhitungan akhir di baris kembali, bukan di barisnya sendiri, dan tanda kurung memastikan sebagian besar ada di sana untuk memudahkan melihat bahwa yang dikembalikan adalah satu pernyataan, seperti ini:

return (x+i*2);

alih-alih

int y = x+i*2;
return y;

Tanda kurung menjadi kebiasaan dan melekat.

person Adam Haile    schedule 02.10.2008
comment
Saya cenderung melakukannya ketika saya mengembalikan matematika seperti itu. Entahlah, sepertinya saya takut metodenya akan kembali sebelum perhitungan matematika selesai dievaluasi atau semacamnya o.O - person Wes P; 02.10.2008
comment
Senang bukan hanya saya yang berpikir itu tidak perlu. ;-) Tanda kurung untuk menetapkan prioritas dapat dimengerti tetapi IMHO pernyataan pengembalian seperti di atas harus dibagi menjadi beberapa pernyataan. Meningkatkan keterbacaan dan mengurangi kemungkinan kesalahan. Berani mengatakan tidak pada notasi sosis! ;-) - person Tooony; 02.10.2008
comment
Untuk menghemat ruang? Tolong jelaskan. Tentunya return x+i*2; lebih pendek? - person TonyK; 21.01.2011
comment
@TonyK - Wow... Saya akui kata-katanya tidak jelas, atau tata bahasanya benar. Yang saya maksud adalah daripada memiliki dua baris... Saya sudah mengedit jawaban saya, silakan lihat di atas. - person Adam Haile; 21.01.2011
comment
orang tua memastikan sebagian besar ada di sana untuk membuatnya lebih mudah untuk melihat bahwa itu adalah pernyataan tunggal yang dikembalikan - apa maksudnya ini? selain tata bahasanya, Anda tidak dapat mengembalikan pernyataan, dan ini menggunakan lebih banyak ruang dibandingkan tanpa tanda kurung. - person Remember Monica; 17.10.2014
comment
Maaf untuk menghidupkan kembali jawaban lama, tapi sebenarnya ada alasannya. Pada masa-masa awal C, sebelum distandarisasi, tanda kurung diperlukan oleh sintaksis. Lihat cm.bell-labs.com/cm/cs/ siapa/dmr/cman.ps. - person Segmented; 28.03.2015
comment
@MarcLehmann Saya tidak tahu apa maksudnya atau bagaimana hal itu mendapat banyak suara & diterima. Menambahkan tanda kurung hanya terlihat jelek bagi saya (saya bahkan mungkin menghilangkannya untuk if dkk, jika saya adalah raja). Adapun make it easier to see that it is a single statement that is returned, pertama, itu adalah ekspresi, bukan pernyataan - & apa - menurut orang return adalah operator yang serakah dan return x+i*2 mungkin mengembalikan x dan membuang sisanya? Kalau iya, wah. Atau apakah jawaban ini benar-benar memikirkan ekspresi panjang yang mungkin mencakup banyak baris? Apa pun yang terjadi, hal itu benar-benar melenceng dari maksudnya. - person underscore_d; 31.07.2016

Motif yang praktis, namun tidak mungkin, adalah jika Anda memberi tanda kurung di sekitar nilai, Anda dapat mendefinisikan pengembalian sebagai makro, dan kemudian memasukkan beberapa kode logging untuk melihat semua pengembalian Anda.

person user10392    schedule 02.10.2008
comment
Wow! Mungkin tidak mungkin demikian, tapi ini adalah satu-satunya motif yang pernah saya dengar ditawarkan untuk kebiasaan yang tidak berarti oh, baiklah, seseorang mungkin berpikir itu mungkin terlihat lebih baik atau lebih konsisten, tidak ada satupun yang tampak menarik untuk dilakukan. Saya. Terima kasih atas sedikit kewarasan ini!! - person AmigoNico; 19.06.2013
comment
Pengamatan yang menarik. Dalam eksperimen saya, saya perhatikan bahwa makro yang ditentukan untuk return muncul untuk mengizinkan argumen makro tanpa tanda kurung, namun makro yang ditentukan untuk nama lain (misalnya persegi) tidak. Saya pikir saya telah menatap ke dalam jurang kali ini... - person Alain O'Dea; 29.08.2015
comment
... lebih baik berharap tidak ada yang memanggil fungsi atau menggunakan operator kenaikan atau memiliki efek samping lain dalam pernyataan pengembaliannya. - person Carl Norum; 29.09.2016
comment
Ini adalah argumen kuat untuk tidak menggunakan tanda kurung pada pernyataan return - person nowox; 07.12.2017
comment
@CarlNorum, bisakah Anda memberikan contoh sederhana? - person polynomial_donut; 19.09.2018
comment
@polynomial_donut - jika Anda memiliki ekspresi dalam pernyataan pengembalian Anda, masalah normal terkait makro seperti evaluasi ganda mungkin terjadi. - person Carl Norum; 19.09.2018

Gaya pribadi saya adalah menggunakan tanda kurung jika ada ekspresi yang kompleks; misalnya.,

return (a + b);

tetapi tidak menggunakannya jika ungkapannya adalah istilah yang sederhana

return a;

Saya tidak bisa mengatakan mengapa saya melakukannya seperti itu; hanya sesuatu yang saya ambil sejak lama.

Ngomong-ngomong, menurut saya membuatnya terlihat seperti pemanggilan fungsi, seperti ini:

return(a);  // ugh

sangat jelek dan salah.

person Kristopher Johnson    schedule 02.10.2008
comment
Dan subjektif - menurut saya ruangannya terlihat lebih buruk (yang sama subjektifnya tetapi berlawanan). - person Jonathan Leffler; 03.10.2008
comment
Dan ada return (a); dan return a ; - person ; 02.03.2014

Dalam spesifikasi C asli, tanda kurung diperlukan di sekitar nilai yang dikembalikan . Meskipun kompiler C modern dan standar ANSI C tidak memerlukannya, keberadaan tanda kurung tidak mempengaruhi nilai yang dikembalikan, dan pemrogram terkadang masih memasukkannya karena kebiasaan, tidak terbiasa dengan standar, untuk konsistensi dengan gaya konvensi yang memerlukannya, atau mungkin untuk kompatibilitas ke belakang.

Saya harus menambahkan, bagi orang-orang yang memikirkan tentang C++: Pertanyaan ini adalah tentang C dan C bukan C++; ini adalah dua bahasa yang berbeda dengan standar, kemampuan, tingkat kesulitan, dan gaya penggunaan berbeda yang muncul -- apa pun kesamaannya, sebaiknya memperlakukan keduanya sebagai dua hal yang benar-benar terpisah. Untuk pertanyaan serupa yang mencakup C++, lihat Apakah tanda kurung di sekitar hasil signifikan dalam pernyataan return?.

person rakslice    schedule 21.10.2017
comment
IMHO, ini adalah satu-satunya jawaban yang masuk akal/meyakinkan (karena menjelaskan dari mana kebiasaan aneh itu berasal). Saya datang ke sini dari JADI: Apakah tanda kurung di sekitar hasil signifikan dalam pernyataan return? baru saja mempelajari perbedaan signifikan lainnya antara C dan C++... - person Scheff's Cat; 24.04.2019

Ada beberapa alasan:

  1. jika/sementara/untuk/dll. semuanya merupakan kata kunci kontrol yang harus mempunyai tanda kurung. Jadi sering kali tampak wajar untuk selalu mengembalikannya juga.

  2. sizeof adalah satu-satunya kata kunci lain yang dapat memilikinya atau tidak, kecuali dalam beberapa kasus Anda harus menggunakan tanda kurung. Jadi lebih mudah untuk membiasakan selalu menggunakan parens. untuk sizeof, yang menyiratkan logika: jika Anda bisa, selalu lakukan.

  3. case/goto adalah satu-satunya kata kunci di mana Anda tidak pernah menggunakan orang tua. ... dan orang-orang cenderung menganggapnya sebagai kasus khusus (dan menyukai keduanya karena menonjol dari kata kunci kontrol lainnya, khususnya goto).

person James Antill    schedule 02.10.2008

Saat mengembalikan -1 seperti pada contoh Anda, menurut saya lebih mudah dibaca dengan tanda kurung karena tanda minusnya lebih terlihat:

return 1

or

return -1

or

return (-1)
person Stein G. Strindhaug    schedule 08.10.2008

Mungkin ini kebiasaan--bagaimanapun juga, orang-orang yang membawakan kami Unix dan C berasal dari proyek Multics. Multics ditulis dalam PL/I, dan dalam PL/I tanda kurung wajib diisi.

person James Jones    schedule 25.04.2014

Saya telah bekerja dengan setidaknya satu programmer yang berpikir return adalah semacam pemanggilan fungsi khusus, dan terkejut ketika dia melihat bahwa kode saya mematuhi tanpa tanda kurung.

person AShelly    schedule 02.10.2008
comment
Dan di masa lalu, dalam beberapa konteks, ini diimplementasikan dengan fungsi yang agak aneh, cret, di tingkat assembler. Nah, itu adalah pernyataan yang luas; Saya harus mencari referensi. Itu ada di buku XINU Comer - Anda dapat menemukannya melalui pencarian Google di Universitas Purdue. - person Jonathan Leffler; 03.10.2008

Seperti yang sering terjadi ketika menggunakan tanda kurung, saya pikir itu hanya untuk keterbacaan (misalnya, Ruby mendukung pemanggilan metode tanpa tanda kurung yang mengapit argumen tetapi buku dan artikel terbaru menyarankan sebaliknya).

person Manrico Corazzi    schedule 02.10.2008

Tanda kurung dalam pernyataan return menunjukkan kepada kompiler bahwa Anda bermaksud agar nilai ini dikembalikan di tumpukan, bukan di memori.

Di masa lalu hal ini diterapkan secara ketat (biasanya), tetapi saat ini sebagian besar penyusun hanya menganggapnya sebagai petunjuk.

Ini adalah sesuatu yang sering saya lakukan, karena kesalahan dapat merusak apa pun yang dikembalikan melalui referensi memori, namun biasanya tidak akan mempengaruhi variabel yang dikembalikan pada tumpukan.

Menggunakan tumpukan untuk variabel sementara juga mengurangi penggunaan memori dan biasanya membuat pemanggilan/pengembalian fungsi lebih cepat karena untuk itulah tumpukan dirancang, data/variabel sementara.

person Diogenes    schedule 26.03.2016
comment
Jika memang ada kompiler yang melakukan hal ini, alangkah baiknya jika menunjukkan contoh rakitan yang dihasilkan oleh kompiler untuk setiap kasus - person rakslice; 29.06.2018

Penggunaan tanda kurung dalam pernyataan return menunjukkan kurangnya pemahaman terhadap sintaksis C/C++. Sesederhana itu. Tapi itu tidak seburuk memasukkan semuanya ke dalam kurung kurawal:

int foo(int x) {
  if (x) {
    return (-1);
  }
  else {
    return (0);
  }
}

Begitu banyak programmer yang melakukan hal ini. Jika salah satu dari Anda membaca ini, mungkin Anda ingin menjelaskannya.

person TonyK    schedule 21.01.2011
comment
Biasanya, tanda kurung kurawal digunakan untuk mengurangi kemungkinan terjadinya kesalahan pada pengeditan kode di masa mendatang. Jawaban pertama untuk pertanyaan ini memberikan contoh: programmers.stackexchange.com/questions/16528/ - person Mike Pelley; 25.08.2011
comment
Selain itu, selalu menggunakan tanda kurung kurawal membuat kode lebih mudah digabungkan secara otomatis. Jika tidak, kemungkinan besar Anda akan mendapatkan konflik yang harus ditangani secara manual. - person hlovdal; 14.12.2012
comment
Ada banyak sekali kasus bug yang muncul karena tidak adanya kurung kurawal. Saya setuju mereka jelek untuk satu baris tetapi ketika Anda mengganti pemanggilan fungsi dengan makro - seperti yang kadang-kadang terjadi karena kendala khusus - atau ketika suatu program difaktorkan ulang untuk mengganti ekspresi satu baris dengan serangkaian ekspresi yang lebih panjang, bug mungkin tidak akan segera terlihat dan hanya terjadi pada kasus-kasus khusus yang tidak dapat diuji secara otomatis. Tanda kurung kurawal juga merupakan persyaratan hardcode di beberapa perusahaan (saya memilikinya di perusahaan kontraktor militer) bahkan untuk 1 liner. - person Coyote; 10.05.2013
comment
MISRA secara eksplisit melarang melepas kawat gigi tambahan tersebut. - person Toby; 08.07.2015