Можно ли в C ++ 11 объявлять глобальные переменные и прототипы функций в одной строке?

Aug 20 2020

Пока я писал код на 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 ++ (прототипы функций и объявления переменных кажутся совершенно разными ...)

Заранее благодарю за ваше время.

Ответы

2 molbdnilo Aug 20 2020 at 13:54

В декларации говорится , что function(x), a, b, и array[i]все ints.
(Это «старомодное прочтение» типов - оно всегда работает в C, но C ++ сломал его; int *xможно прочитать « *xis an int», но int &xнельзя прочитать « &xis an int».)

Это было хорошо с первых дней C (то есть в течение полувека или около того), и это не ограничивается глобальными декларациями.

Это также очень сбивает с толку, и вы не найдете многих, кто думает, что это хорошая идея.
Большинство людей отказались от объявления более одной переменной в строке.
Он менее читабелен, легко забыть инициализатор, а в наши дни экраны могут отображать много строк одновременно.