Di C ++ 11, dapatkah Anda mendeklarasikan variabel global dan prototipe fungsi pada baris yang sama?

Aug 20 2020

Saat saya menulis beberapa kode C ++ 11:

#include <bits/stdc++.h>
using namespace std;

int a, b, array[25];
int function();

int main() {
... (not important)

Karena penasaran, saya meletakkan deklarasi variabel di baris yang sama dengan prototipe fungsi:

#include <bits/stdc++.h>
using namespace std;

int function(), a, b, array[25];

int main() {
... (not important)

Ini dikompilasi dengan benar di XCode (disetel ke [-std = c ++ 11]) dan a, b, array[]dapat digunakan seperti variabel / array normal.

Akankah ini berfungsi di sebagian besar / semua kompiler, dan apakah ini tidak disarankan / baik-baik saja? Mengapa ini berfungsi di C ++ (prototipe fungsi dan deklarasi variabel tampak sangat berbeda ...)

Terima kasih sebelumnya atas waktu Anda.

Jawaban

2 molbdnilo Aug 20 2020 at 13:54

Deklarasi tersebut mengatakan bahwa function(x), a, b, dan array[i]semua ints.
(Ini adalah jenis "membaca sekolah lama" - selalu berfungsi di C, tetapi C ++ memecahkannya; int *xdapat dibaca " *xadalah int", tetapi int &xtidak dapat dibaca " &xadalah int".)

Ini baik-baik saja sejak awal C (jadi, selama setengah abad atau lebih), dan tidak terbatas pada deklarasi global.

Ini juga sangat membingungkan, dan Anda tidak akan menemukan banyak orang yang menganggapnya sebagai ide yang bagus.
Kebanyakan orang sekarang sudah menyerah untuk mendeklarasikan lebih dari satu variabel dalam satu baris.
Ini kurang terbaca, mudah melupakan penginisialisasi, dan layar mampu menampilkan banyak baris secara bersamaan hari ini.