Saya ingin menambahkan jawaban yang sudah diberikan dengan mengutip standar bahasa yang sebenarnya.
Apakah 'int main;' program C yang valid?
Jawaban singkat (pendapat saya): hanya jika implementasi Anda menggunakan "lingkungan eksekusi bebas".
Semua kutipan berikut dari C11
5. Lingkungan
Sebuah implementasi menerjemahkan file sumber C dan menjalankannya program C dalam dua lingkungan sistem pemrosesan data, yang akan disebut lingkungan terjemahan dan lingkungan eksekusi [...]
5.1.2 Lingkungan eksekusi
Dua lingkungan eksekusi ditentukan: berdiri bebas dan dihosting. Dalam kedua kasus, program startup terjadi ketika fungsi C yang ditunjuk dipanggil oleh lingkungan eksekusi.
5.1.2.1 Lingkungan berdiri bebas
Dalam lingkungan berdiri bebas (di mana eksekusi program C dapat berlangsung tanpa manfaat apa pun dari sistem operasi), nama dan jenis fungsi yang dipanggil saat program dimulai ditentukan oleh implementasi.
5.1.2.2 Lingkungan yang dihosting
Lingkungan yang dihosting tidak perlu disediakan, tetapi harus sesuai dengan spesifikasi berikut jika ada.
5.1.2.2.1 Memulai program
Fungsi yang dipanggil saat program startup dinamai main . [...] Ini harus didefinisikan dengan tipe kembalian dari int dan tanpa parameter [...] atau dengan dua parameter [...] atau ekuivalen atau dengan cara lain yang ditentukan implementasi.
Dari sini, diamati hal-hal berikut:
- Program C11 dapat memiliki lingkungan eksekusi yang berdiri sendiri atau dihosting dan valid.
- Jika memiliki fungsi yang berdiri sendiri, tidak perlu ada fungsi utama.
- Jika tidak, harus ada satu dengan return vale bertipe int .
Dalam lingkungan eksekusi berdiri bebas, saya berpendapat bahwa ini adalah program yang valid yang tidak memungkinkan startup terjadi, karena tidak ada fungsi yang hadir untuk itu seperti yang dipersyaratkan dalam 5.1.2. Dalam lingkungan eksekusi yang dihosting, saat kode Anda memasukkan objek bernama main , itu tidak dapat memberikan nilai kembali, jadi saya berpendapat bahwa itu bukan program yang valid dalam pengertian ini, meskipun seseorang juga dapat berdebat seperti sebelumnya jika program tersebut tidak dimaksudkan untuk dieksekusi (pada mungkin ingin memberikan data hanya misalnya), maka itu tidak memungkinkan untuk melakukan hal itu.
Apakah 'int main;' program C ++ yang valid?
Jawaban singkat (pendapat saya): hanya jika implementasi Anda menggunakan "lingkungan eksekusi bebas".
Kutipan dari C ++ 14
3.6.1 Fungsi utama
Suatu program harus berisi fungsi global yang disebut main, yang merupakan permulaan program yang ditentukan. Ini adalah implementasi yang ditentukan apakah suatu program dalam lingkungan berdiri bebas diperlukan untuk menentukan fungsi utama. [...] Ini akan memiliki tipe kembalian dari tipe int, tetapi sebaliknya tipenya adalah implementasi-didefinisikan. [...] Nama utama tidak dicadangkan.
Di sini, sebagai lawan dari standar C11, lebih sedikit batasan yang diterapkan pada lingkungan eksekusi berdiri bebas, karena tidak ada fungsi startup yang disebutkan sama sekali, sedangkan untuk lingkungan eksekusi yang dihosting, kasusnya hampir sama dengan C11.
Sekali lagi, saya berpendapat bahwa untuk kasus yang dihosting, kode Anda bukan program C ++ 14 yang valid, tetapi saya yakin itu untuk kasus yang berdiri sendiri.
Karena jawaban saya hanya mempertimbangkan lingkungan eksekusi , saya pikir jawaban dasblinkenlicht ikut bermain, karena nama mangling yang terjadi di lingkungan penerjemahan terjadi sebelumnya. Di sini, saya tidak begitu yakin bahwa kutipan di atas diamati dengan sangat ketat.
gcc -std=c99 -pedantic ...