sintaxis - programacion en dev c++ ejemplos
¿Por qué este programa es rechazado erróneamente por tres compiladores de C++? (30)
Estoy teniendo algunas dificultades para compilar un programa de C ++ que he escrito.
Este programa es muy simple y, a mi entender, cumple con todas las reglas establecidas en el Estándar de C ++ He leído la totalidad de ISO / IEC 14882: 2003 dos veces para estar seguro.
El programa es el siguiente:
Aquí está la salida que recibí al intentar compilar este programa con Visual C ++ 2010:
c:/dev>cl /nologo helloworld.png
cl : Command line warning D9024 : unrecognized source file type ''helloworld.png'', object file assumed
helloworld.png : fatal error LNK1107: invalid or corrupt file: cannot read at 0x5172
Desanimado, probé g ++ 4.5.2, pero fue igualmente inútil:
c:/dev>g++ helloworld.png
helloworld.png: file not recognized: File format not recognized
collect2: ld returned 1 exit status
Pensé que Clang (versión 3.0 tronco 127530) debe funcionar, ya que es muy elogiado por su conformidad con las normas. Desafortunadamente, ni siquiera me dio uno de sus bonitos mensajes de error resaltados:
c:/dev>clang++ helloworld.png
helloworld.png: file not recognized: File format not recognized
collect2: ld returned 1 exit status
clang++: error: linker (via gcc) command failed with exit code 1 (use -v to see invocation)
Para ser honesto, realmente no sé qué significa ninguno de estos mensajes de error.
Muchos otros programas de C ++ tienen archivos de origen con una extensión .cpp , así que pensé que quizás necesitaba cambiar el nombre de mi archivo. Cambié su nombre a helloworld.cpp , pero eso no ayudó. Creo que hay un error muy serio en Clang porque cuando intenté usarlo para compilar el programa cuyo nombre se cambió, se volcó e imprimió "84 advertencias y 20 errores generados". e hizo que mi computadora sonara mucho!
¿Qué he hecho mal aquí? ¿Me he perdido alguna parte crítica del estándar de C ++? ¿O son los tres compiladores realmente tan rotos que no pueden compilar este sencillo programa?
helloworld.png: archivo no reconocido: formato de archivo no reconocido
Obviamente, debes formatear tu disco duro.
Realmente, estos errores no son tan difíciles de leer.
¿Escribiste el programa a mano y luego lo escaneaste en la computadora? Eso es lo que implica "helloworld.png". Si ese es el caso, debe tener en cuenta que el estándar C ++ (incluso en su edición más reciente) no requiere la presencia de reconocimiento óptico de caracteres, y desafortunadamente no está incluido como una característica opcional en ningún compilador actual.
Es posible que desee considerar la transposición de los gráficos a un formato de texto. Se puede usar cualquier editor de texto plano; el uso de un procesador de textos, aunque es capaz de generar una impresión bonita, probablemente resultará en el mismo error que se produce al intentar escanear.
Si es realmente aventurero, puede intentar escribir su código en un procesador de textos. Imprímelo, preferiblemente utilizando una fuente como OCR-A . Luego, tome su impresión y vuelva a escanearla. La exploración se puede ejecutar a través de un paquete de OCR de terceros para generar un formulario de texto. El formulario de texto puede luego compilarse usando uno de los muchos compiladores estándar.
Sin embargo, tenga cuidado con el gran costo del papel en el que incurrirá durante la fase de depuración.
¿Está tu compilador configurado en modo experto? Si es así, no debería compilar. Los compiladores modernos están cansados de "¡Hola mundo!"
¿Soy el único que no puede reconocer el carácter entre ''retorno'' y el punto y coma? ¡Eso podría ser!
Convertí tu programa de PNG a ASCII, pero aún no se compila. Para su información, probé con un ancho de línea de 100 y 250 caracteres, pero ambos obtuvieron resultados comparables.
` ` . `. ` ...
+:: ..-.. --.:`:. `-` .....:`../--`.. `-
` ` ````
`
` `` .` `` .` `. `` . -``- ..
.`--`:` :::.-``-. : ``.-`- `-.-`:.-` :-`/.-..` ` `-..`...- :
.` ` ` ` .` ````:`` - ` ``-.` `
`- .. ``
. ` .`. ` ` `. ` . . ` . ` . . .` .` ` ` `` ` `
`:`.`:` ` -..-`.`- .-`-. /.-/.-`.-. -...-..`- :``` `-`-` :`..`-` ` :`.`:`- `
`` ` ```. `` ```` ` ` ` ` ` ` ` .
: -...`.- .` .:/ `
- ` `` .
-`
`
Debe especificar la precisión de su salida precedida por dos puntos inmediatamente antes de la llave de cierre final . Dado que la salida no es numérica, la precisión es cero, por lo que necesita esto:
: 0}
Desafortunadamente, ha seleccionado tres compiladores que admiten todos los idiomas múltiples, no solo C ++. Todos tienen que adivinar el lenguaje de programación que usaste. Como probablemente ya sepa, el formato PNG es adecuado para todos los lenguajes de programación, no solo C ++.
Por lo general, el compilador puede averiguar el lenguaje en sí. Por ejemplo, si obviamente se dibuja el PNG con crayones, el compilador sabrá que contiene Visual Basic. Si parece que está dibujado con un lápiz mecánico, es fácil reconocer al ingeniero en el trabajo, escribiendo el código FORTRAN.
Este segundo paso tampoco ayuda al compilador, en este caso. C y C ++ simplemente parecen demasiado similares, hasta el #include
. Por lo tanto, debes ayudar al compilador a decidir qué idioma es realmente. Ahora, podrías usar medios no estándar. Por ejemplo, el compilador de Visual Studio acepta los argumentos de línea de comandos / TC y / TP , o puede usar la opción "Compilar como: C ++" en el archivo del proyecto. GCC y CLang tienen sus propios mecanismos, que no sé.
Por lo tanto, recomiendo usar el método estándar en lugar de decirle a su compilador que el siguiente código está en C ++. Como ya ha descubierto, los compiladores de C ++ son muy exigentes con respecto a lo que aceptan. Por lo tanto, la forma estándar de identificar C ++ es mediante la intimidación que los programadores agregan a su código C ++. Por ejemplo, la siguiente línea le aclarará a su compilador que lo que sigue es C ++ (y es mejor que lo compile sin quejas).
// To the compiler: I know where you are installed. No funny games, capice?
Descubrí que es útil no escribir mi código en el cristal de mi monitor con un marcador mágico, aunque se ve bien cuando está realmente negro. La pantalla se llena demasiado rápido y luego las personas que me dan un monitor limpio me llaman nombres cada semana.
Un par de mis empleados (soy gerente) están participando para comprarme una de esas computadoras rojas con las perillas. Dijeron que no necesitaré marcadores y que puedo limpiar la pantalla cuando esté llena, pero debo tener cuidado al agitarla. Supongo que es delicado de esa manera.
Es por eso que contrato a las personas inteligentes.
Dibuja la inclusión abajo para hacerla compilar:
#include <ChuckNorris>
Escuché que puede compilar errores de sintaxis ...
El primer problema es que está intentando devolver un valor incorrecto al final de la función principal. El estándar de C ++ dicta que el tipo de retorno de main () es int, pero en su lugar, está intentando devolver el conjunto vacío.
El otro problema es, al menos con g ++, que el compilador deduce el idioma utilizado del sufijo de archivo. De g ++ (1):
Para cualquier archivo de entrada dado, el sufijo del nombre del archivo determina qué tipo de compilación se realiza:
file.cc file.cp file.cxx file.cpp file.CPP file.c ++ file.C
Código fuente de C ++ que debe ser preprocesado. Tenga en cuenta que en .cxx, las dos últimas letras deben ser literalmente x. Del mismo modo, .C se refiere a un capital literal C.
Solucionar estos problemas debería dejarte con una aplicación Hello World totalmente funcional, como se puede ver en la demostración here .
El problema radica en la definición de la sintaxis, ¡intente usar la regla y los compases para una descripción más clásica!
Aclamaciones,
En la norma, §2.1 / 1 especifica:
Los caracteres del archivo fuente físico se asignan, de una manera definida por la implementación, al conjunto de caracteres fuente básico (introduciendo caracteres de nueva línea para los indicadores de fin de línea) si es necesario.
Su compilador no admite ese formato (alias no puede asignarlo al conjunto de caracteres de origen básico ), por lo que no puede pasar a otras etapas de procesamiento, de ahí el error. Es completamente posible que su compilador admita una asignación de imagen a un juego de caracteres de origen básico, pero no es obligatorio.
Dado que esta asignación está definida por la implementación, deberá consultar la documentación de su implementación para ver los formatos de archivo que admite. Por lo general, todos los proveedores de compiladores principales admiten archivos de texto (definidos canónicamente): cualquier archivo producido por un editor de texto, generalmente una serie de caracteres.
Tenga en cuenta que el estándar C ++ se basa en el estándar C (§1.1 / 2), y el estándar C (99) dice, en §1.2:
Esta norma internacional no especifica
- el mecanismo por el cual los programas de C se transforman para ser utilizados por un sistema de procesamiento de datos;
- el mecanismo por el cual los programas de C se invocan para ser utilizados por un sistema de procesamiento de datos;
- el mecanismo por el cual los datos de entrada se transforman para ser utilizados por un programa en C;
Entonces, nuevamente, el tratamiento de los archivos de origen es algo que necesita encontrar en la documentación de sus compiladores.
Estás tratando de compilar una imagen.
Escriba lo que ha escrito a mano en un documento llamado main.cpp, ejecute ese archivo a través de su compilador y luego ejecute el archivo de salida.
Este programa es válido, no puedo encontrar errores.
Mi conjetura es que tienes un virus en tu máquina. Sería mejor si reformatea la unidad y reinstala el sistema operativo.
Háganos saber cómo funciona, o si necesita ayuda con la reinstalación.
Odio los virus.
Intente cambiar la interfaz de entrada. C ++ espera que se conecte un teclado a su computadora, no un escáner. Puede haber problemas de conflicto periféricos aquí. No verifiqué en la Norma ISO si la interfaz de entrada del teclado es obligatoria, pero eso es cierto para todos los compiladores que he usado. Pero quizás la entrada del escáner ahora está disponible en C99, y en este caso su programa debería funcionar. Si no, tendrás que esperar la próxima versión estándar y actualización de compiladores.
Intente de esta manera:
No puedo ver una nueva línea después de esa última llave.
Como saben: "Si un archivo fuente que no está vacío no termina con un carácter de nueva línea, ... el comportamiento no está definido".
OCR dice:
N lml_�e <loJ+_e__}
.lnt Mk.,n ( ln+ _rSC Lhc_yh )
h_S_
_l
s_l . co__ <, " H llo uo/_d ! ''` << s l� . ena_ .
TP__rn _ |
_|
Lo que es bastante bueno, para ser justos.
Olvidaste el preprocesador. Prueba esto:
pngtopnm helloworld.png | ocrad | g++ -x ''c++'' -
Olvidaste usar Comic Sans como una fuente, por eso es un error.
Parece que tu compilador no soporta archivos en tal hmm ... codificación. Intenta convertirlo a ASCII.
Podrías probar el siguiente script de python. Tenga en cuenta que necesita instalar PIL y pytesser .
from pytesser import *
image = Image.open(''helloworld.png'') # Open image object using PIL
print image_to_string(image) # Run tesseract.exe on image
Para usarlo, haz:
python script.py > helloworld.cpp; g++ helloworld.cpp
Prueba este:
Puedes probar diferentes colores para los corchetes, tal vez un poco de verde o rojo ayudaría? Creo que tu compilador no puede reconocer la tinta negra: P
Sus compiladores esperan ASCII , pero ese programa obviamente se escribe usando EBCDIC .
Tu <
y >
, (
y )
, {
y }
no parecen coincidir muy bien; Intenta dibujarlos mejor.
Tu fuente apesta, ¿cómo debería un analizador poder leer eso? Toma un curso de caligrafía.
añadir:
using namespace std;
justo después de incluir: P: D
File format not recognized
Debe formatear correctamente su archivo. Eso significa usar los colores y las fuentes correctos para su código. Vea las documentaciones específicas para cada compilador ya que estos colores varían entre compilador;)