En C++ 11, ¿puede declarar variables globales y prototipos de funciones en la misma línea?

Aug 20 2020

Mientras estaba escribiendo un código C++ 11:

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

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

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

por curiosidad, puse las declaraciones de variables en la misma línea que el prototipo de función:

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

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

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

Se compiló correctamente en XCode (establecido en [-std=c++11]) y a, b, array[]podría usarse como variables/matrices normales.

¿Funcionará esto en la mayoría/todos los compiladores, y se desaconseja/está bien? ¿Por qué funciona esto en C++ (los prototipos de funciones y las declaraciones de variables parecen bastante diferentes...)

Gracias de antemano por su tiempo.

Respuestas

2 molbdnilo Aug 20 2020 at 13:54

La declaración dice que function(x), a, by array[i]son todos ints.
(Esta es la "lectura de la vieja escuela" de tipos: siempre funciona en C, pero C ++ lo rompió; int *xse puede leer " *xes un int", pero int &xno se puede leer " &xes un int".)

Esto ha estado bien desde los primeros días de C (entonces, durante medio siglo más o menos), y no se limita a las declaraciones globales.

También es muy confuso, y no encontrarás muchos que piensen que es una buena idea.
La mayoría de la gente ahora ha renunciado a declarar más de una variable en una línea.
Es menos legible, fácil de olvidar un inicializador, y las pantallas son capaces de mostrar muchas líneas simultáneamente en estos días.