Di C ++ 11, dapatkah Anda mendeklarasikan variabel global dan prototipe fungsi pada baris yang sama?
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
Deklarasi tersebut mengatakan bahwa function(x)
, a
, b
, dan array[i]
semua int
s.
(Ini adalah jenis "membaca sekolah lama" - selalu berfungsi di C, tetapi C ++ memecahkannya; int *x
dapat dibaca " *x
adalah int
", tetapi int &x
tidak dapat dibaca " &x
adalah 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.