Можно ли в C ++ 11 объявлять глобальные переменные и прототипы функций в одной строке?
Пока я писал код на C ++ 11:
#include <bits/stdc++.h>
using namespace std;
int a, b, array[25];
int function();
int main() {
... (not important)
из любопытства я поместил объявления переменных в одну строку с прототипом функции:
#include <bits/stdc++.h>
using namespace std;
int function(), a, b, array[25];
int main() {
... (not important)
Он правильно скомпилирован в XCode (установлен на [-std = c ++ 11]) и a, b, array[]
может использоваться как обычные переменные / массивы.
Будет ли это работать с большинством / всеми компиляторами, и это не рекомендуется / нормально? Почему это работает в C ++ (прототипы функций и объявления переменных кажутся совершенно разными ...)
Заранее благодарю за ваше время.
Ответы
В декларации говорится , что function(x)
, a
, b
, и array[i]
все int
s.
(Это «старомодное прочтение» типов - оно всегда работает в C, но C ++ сломал его; int *x
можно прочитать « *x
is an int
», но int &x
нельзя прочитать « &x
is an int
».)
Это было хорошо с первых дней C (то есть в течение полувека или около того), и это не ограничивается глобальными декларациями.
Это также очень сбивает с толку, и вы не найдете многих, кто думает, что это хорошая идея.
Большинство людей отказались от объявления более одной переменной в строке.
Он менее читабелен, легко забыть инициализатор, а в наши дни экраны могут отображать много строк одновременно.