2011-05-17 21 views

Respuesta

12

El lenguaje C++ permite declarar una variable en la declaración de clase. Similar a:

class Mumble { 
    // etc... 
} globalMumble; 

se requiere que el punto y coma sintaxis para permitir que el compilador sabe si es o no una variable se declara así. Esta sintaxis es una fuente crónica de muy difícil de interpretar los mensajes de error de compilación. La peor es la siguiente:

mumble.h:

class Mumble { 
    // etc... 
}  // <== note: semi-colon forgotten 

mumble.cpp:

#include "stdafx.h" 
#include "mumble.h" 

int main() { 
    Mumble* obj = new Mumble; 
} 

Esto produce estos mensaje de error maravillosa:

main.cpp(8): error C2628: 'Mumble' followed by 'int' is illegal (did you forget a ';'?) 
main.cpp(9): error C3874: return type of 'wmain' should be 'int' instead of 'Mumble' 
main.cpp(10): error C2440: 'return' : cannot convert from 'int' to 'Mumble' 

cuenta que todas las los mensajes de error se refieren al archivo .cpp, no al archivo .h que contiene el error. Los programadores desesperados han perdido horas en esto, junto con grandes grupos de cabello en la cabeza.

El lenguaje C# fue diseñado por programadores C++ altamente calificados. Quien se propuso diseñar un lenguaje que evitara este tipo de problemas de sintaxis de la vida real. Esto es evidente en muchos lugares en la sintaxis de C#. Resumen largo: C# no permite este tipo de sintaxis de C++, no se requiere punto y coma para ayudar al compilador.

+4

... aunque el punto y coma * está permitido, * según la especificación C# (es opcional). –

3

Semicolons declaraciones de delimitación en C#.

Dado que las clases no son enunciados (y un paréntesis ya finaliza la definición de clase), un punto y coma sería redundante.

+0

Ciérrelo o respóndalo, no haga ambas cosas. –

+0

@Hans: En el momento en que lo respondí, ya se había identificado como un duplicado, y obtuve tres votos cercanos. Así es la vida. Verifique las marcas de tiempo en mi respuesta y el cierre. –

Cuestiones relacionadas