Duda estúpida de C

B

#25

Pero tio, eso no es problema del lenguaje xD, es problema de las librerias que utilizan.

Es decir, te falta codigo para compilar código. El problema esta ahí, no en si sigue un standar etc.

C y C++ existen pq son una programacion a mas bajo nivel, y eso interesa muchas veces, ahora bien, si vas a hacer una pagina web, pues no las vas a hacer en C desde 0.

Seria como "quejarse", que mierda el ensamblador pq no me permite mandar por UDP de una manera rapida y facil xD. Cada cosa esta orientada a tus necesidades, y acorde a las mismas escoges el lenguaje de programacion en el que desarrollaras tu aplicación.

Ahora bien, tema aparte podria ser las palabras reservadas adicionales que tiene cada compilador propietario, pero no es algo muy traumatico a la hora de la verdad.

Yo por ejemplo, voy a lo practico, JAVA para aplicaciones en el PC, y para sistemas empotrados C y C++. Si algun dia me meto en programacion web, redes etc, pues supongo que pasaria de JAVA a .NET o C#, pero de momento no tengo necesidad xD

DaGGoTH

#1 ¿En qué universidad estudias?

JuAn4k4

#25 El problema de tener demasiadas cosas hechas, es que despues te enfrentas a un pedazo de monstruo, cuando con una cosa mas sencillita puedes apañarte bastante bien e incluso mas comodamente.

cabron

kas

C y C++ tienen un estándar, pero eso estándar, tiene unos límites.

¿Por qué? Por que está pensando para ser un lenguaje de nivel medio, que ofrece al programador un acceso de bajo nivel a la máquina, mucha libertad, pocas restricciones, y que se puede utilizar en prácticamente cualquier plataforma, ya sea un microcontrolador de un dispostivio empotrado, un ordenador de sobremesa, un mainframe o lo que sea.

Si algunas cosas en C o C++ se tuviesen que hacer de cierta forma sí o sí por pelotas, como ocurre con los lenguajes que mencionas, perderían completamente su sentido y su función y no se podrían usar para más de la mitad de las cosas que están hechas con C o C++.

Explicame tú como haces un driver o un kernel de un sistema operativo para una arquitectura determinada que tiene sus peculiaridades que la diferencian de las demás, imponiendo unas reglas que obligan a que todo se haga de tal manera.

Lo que pides, no cuadra en absoluto con los objetivos de estos lenguajes y su uso.

zildjian

#32 UPF.

kas

Ei chicos un momento no corrais tanto xD

Si cierto, en parte me referia a las librerias, pero no en concreto me referia a eso:

Yo cuando trabajo con C# leer el codigo me es facilisimo, aunque solo lleve 2 años con el. No hay defines extraños, las referencias a otros ensamblados son muy rigidas, no hay que repetir el codigo en 2 archivos (.h .c / .cpp) aunque se pueden usar Interfaces y Clases.

Ahora no encuentro ningun ejemplo en el pc del curro a este respecto, para poder mostraros a lo que me refiero, a ver si el lunes saco algo.

#33 No entiendo a que te refieres con el monstruo. YO lo que pienos es que almenos a dia de hoy no tengo que ponerme a programar una Hashtable a mano (aunque como han comentado anteriormente es posible hacerlo si ninguna de las existentes cumple con tus necesidades).

#34 Si, como he comentado antes, entiendo perfectamente que C/C++ ha sido la base para TODO, y que se programan desde coches hasta robots, pasando por microchips como MP3 de 20€, pero como ya he dicho me estaba refierieno al mundo del desarrollo para aplicaciones Windows.

Segun se, C fue creado por unos tios de una universidad que portaron el lenguaje de un hardware especifico a uno abierto. A partir de aqui no se quien se ha encargado de evolucionar el lenguaje ni de que manera lo ha hecho. Continuo sin entender xq despues de 7 u 8 años muchos programadores continuan usando C/C++ para ahcer aplicaciones de escritorio.

maRc

#36, sigues sin entenderlo.

Tu problema es que crees que C y C++ están orientados en la misma dirección que C# o Java cuando no es así. C y C++ son lenguajes de "bajo nivel", donde se te permite hacer casi todo lo que quieras. C# y Java están orientados al desarrollo de aplicaciones en el ámbito empresarial, por lo que las plataformas, que no lenguajes, vienen con chorrocientas apis para hacer cualquier cosa.

A parte, los defines extraños esos que dices, vienen dados por como se programa con el api gráfica de Windows, que sí, es un coñazo enorme. Prueba a usar otras bibliotecas de GUI más modernas, como Qt por ejemplo, y dime si ves cosas extrañas. Tus quejas no deberían ir dirigidas a C/C++, sino a Microsoft y sus MFC.

PD: En C++ también puedes unir en un solo fichero la declaración y la implementación de una clase.

cabron

#36:

Vamos por partes:

"no hay que repetir el codigo en 2 archivos (.h .c / .cpp) aunque se pueden usar Interfaces y Clases. "

No sé que conocimientos tienes de C++ pero lo que has dicho no tiene ningún sentido.

Observa estos 3 programas:

TEST 1



//Archivo test.c

#include <iostream>

using namespace std;

class prueba
{
public:
	void saludar()
	{
		cout << "Hola kas";
	}
};


int main()
{

prueba hola;

hola.saludar();

return 0;
}


TEST 2


//Archivo test.h

#include <iostream>

using namespace std;

class prueba
{
public:
	void saludar()
	{
		cout << "Hola kas";
	}
};


//Archivo test.cpp

#include "test.h"

int main()
{

prueba hola;

hola.saludar();

return 0;
}


TEST 3


//Archivo test.h

#include <iostream>

using namespace std;

class prueba
{
public:
	void saludar();
	
};


//Archivo prueba.cpp

#include "test.h"

void prueba::saludar()
{
	cout << "Hola kas";
}


//test.cpp

#include "test.h"

int main()
{

prueba hola;

hola.saludar();

return 0;
}


Estos 3 programas, que vienen en 1 archivo, 2 archivos, y 3 archivos, son exactamente el mismo, y hacen exactamente lo mismo.

Ni en C ni en C++ existe alguna norma que te obligue a dividir el programa en archivos, lo hacen los programadores por que quieren, y tienen un buen motivo para hacerlo. Tener el código organizado. Además, yo no veo que el código se repita en ningún momento, en un sitio pones la declaración, y en otro la implementación, ¿donde ves tú el código repetido?

Tanto C y C++ permiten separar las declaraciones de las definiciones, donde una declaración es "tal cosa existe", y una definición es "tal cosa consiste en esto". Poniendo las declaraciones en un archivo separado, cuando alguien tiene que referenciar código fuente de otro programa, solo necesita las declaraciones, no necesita el código de la implementación, que puede ni siuiera existir, y simplemente tienes el binario compilado. Con el archivo de declaraciones te vale.

Si te fijas, esto es muy parecido al sistema de imports que tiene Java, pero existe una sutil diferencia... import, solo te deja importar clases, mientras que #include, te deja incluir cualquier cosa que sea texto, ya sea la declaración de una clase, o directamente código fuente sin compilar.

Lo que parece que no consigues ver, es la que la diferencia entre C++ y Java, es que C++ ofrece la mayor libertad posible, y es responsabilidad del programador usar esa libertad de forma coherente para hacer código legible.

Con Java tienes import, y con eso importas un paquete, o una clase de un paquete. Con C++ tienes #include que te da libertad para estructurar el código del programa como te salga del ojal, aunque la más frecuente es la ya mencionada: declaraciones en el .h, implementaciones en el .cpp.

"No hay defines extraños"

Cuando puedas, pon un ejemplo, y vemos a que te refieres con "un define extraño".

"las referencias a otros ensamblados son muy rigidas"

No entiendo en que punto esto es una ventaja, ¿podrías explicarte mejor?.

"Continuo sin entender xq despues de 7 u 8 años muchos programadores continuan usando C/C++ para ahcer aplicaciones de escritorio"

Primero, por lo mismo que te he explicado con el tema de los include.... libertad, segundo, rendimiento. C++ pone pocas restricciones y te deja diferentes opciones para hacer lo mismo, y hay muchos programas que no son posibles o no son eficientes utilizando las "soluciones predefinidas" que te da Java o C#. Sin ir más lejos, ¿cuantos juegos para PC de última generación están escritos en Java o C#?

A ver si me entiendes, está claro que para infinidad de trabajos, C y C++ es una mala opción, por que esa misma libertad de la que te hablo, significa que hay cantidad de detalles que tienes que manejar tú mismo, y que en otros lenguajes como Java, ya se encarga el entorno de ejecución de manejarlos, y a ti te queda libertad para centrate en tú programa.

Pero es que en otros casos, necesitas esa libertada para hacer lo que quieres.

Tu problema es que metes todas las aplicaciones para Windows en un mismo saco,

Yo no te niego que habrá programas escritos en C++ para windows, que se hubiesen terminado más rápido, el código fuente sería más corto, y funcionarían igual, si se hubiesen hecho en Java o C#, pero eso no quita que hay otros programas que necesitan de las características que C++ ofrece y que no están disponibles en otros lenguajes.

Riu

#36 Se llama programacion a bajo nivel . con c o c++ puedes hacer de todo al contrario con c# no. c# esta dedicado a una tarea o tareas en concreto si lo sacas de ahi no funciona, c al ser de bajo nivel funciona en todo. Eso no quiere decir que sea la mejor para hacer una pagina web , evidentemente no, pero si te garantiza que es el lenguaje mas potente..

Usuarios habituales