Que se permite un doble ;;
, es por razones históricas. Es una resaca de los lenguajes de estilo C (en lo que se basa C#).
C & C++ tienen el concepto de macros de preprocesador que se reemplazan en el código antes de compilar el código, p.ejemplo trivial AddAndSquare
es una macro, no una función
#define AddAndSquare(X,Y) (X+Y)*(X+Y)
int Foo() {
int a = 1, b = 2;
return AddAndSquare(a, b);
}
va al compilador como
int Foo() {
int a = 1, b = 2;
return (A+B)*(A+B);
}
puede volver a definir las macros sean diferentes a su definición inicial, también puede volver a definir ellos para que don' existe en absoluto.
Dada una aserción macro #define ASSERT(c) if(!c) throw new AssertionFailedException()
puede tener su código lleno de declaraciones ASSERT.
void Foo(int x) {
int y = x + 2;
ASSERT(y != 0);
int z = x/y;
. . . .
}
Ahora consideran que sólo desea que el afirma en versiones de depuración, pero no en las versiones de lanzamiento, para la liberación se redefine la macro a estar vacío (literalmente #define ASSERT
). Ahora, cuando Foo va al compilador para una versión de lanzamiento, parece que este
void Foo(int x) {
int y = x + 2;
;
int z = x/y;
. . . .
}
Ahora hay una sentencia vacía donde estaba la aserción, porque no puede o no ser una declaración allí (dependiendo de la configuración de compilación), el compilador necesita poder manejar una declaración vacía.
Por qué esta convención se mantuvo en C# donde no hay nada como las macros C
, no tengo idea, pero posiblemente porque causa poco o nada de daño.
Supongo que múltiples múltiplos ;
son eliminados por el compilador antes de que comience a analizar el código, por lo tanto, el compilador no tiene en cuenta su ;
inalcanzable.
Por qué sería, es perfectamente alcanzable, solo está vacío – Dyppl
@Stook: ¿Cómo se puede alcanzar después de una declaración de devolución incondicional? Intente poner cualquier otra declaración allí (por ejemplo, una declaración de variable) y el compilador da una advertencia. –
oh lo siento, no le presté suficiente atención a un ejemplo real, mi mal. – Dyppl