En C++ 11, ¿puede declarar variables globales y prototipos de funciones en la misma línea?
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
La declaración dice que function(x)
, a
, b
y array[i]
son todos int
s.
(Esta es la "lectura de la vieja escuela" de tipos: siempre funciona en C, pero C ++ lo rompió; int *x
se puede leer " *x
es un int
", pero int &x
no se puede leer " &x
es 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.