Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: AlbertoBSD en 3 Mayo 2016, 23:23 pm



Título: C vs C++ [Civil War]
Publicado por: AlbertoBSD en 3 Mayo 2016, 23:23 pm
Este post es totalmente offtopic del foro de Programacion C/C++

Las discuciones entre programadores que giran en torno al lenguaje C y sus derivados siempre son por temas un tanto tontos como si:

Código
  1. void funcion() {
  2. }

Código
  1. void funcion()
  2. {
  3. }

Que si espacio o tabulador, que si funciones o metodos que si unsigned o signed, que si new o malloc, que si malloc o calloc en fin..

Cuando aprendi programación iniciamos con orientado a objetos y despues ejemplos en C estandar y me agradaban mas los ejemplos sencillos en C, me gustaba tener mas control de la memoria y programar a mas bajo nivel.

A muchos no les gusta o no entienden los punteros o que se yo tal vez vienen de algun lenguaje de mas alto nivel cómo VB o de algun lenguaje script donde no se preocupan tanto por la memoria o los tipos de datos.

He aprendido muchos lenguajes tanto VB como C sharp, Java, Ensamblador, PHP, y varios lenguajes script puedo decir que todos tienen sus pro y sos contra, aun asi NO me canso de programar en C, hay veces que he tenido fricciones con compañeros por la forma en la que programo me dicen usa esto o has esto y la verdad yo nunca les he dicho com programar en fin...

Yo prefiero usar Tabuladores para separar.

¿Tienen ustedes fricciones por como programan o alguna vez le han dicho a alguien mas que mejor use una función u otra?


Título: Re: C vs C++ [Civil War]
Publicado por: MAFUS en 4 Mayo 2016, 00:00 am
Yo soy de C. Allá por el 2005 - 2008 estuve tocando C# y me gustaba como lenguaje POO. Lo he intentado con otros lenguajes pero me siento incómodo por la falta de expresividad y control que obtengo con C. Y considero C++ un lenguaje muy sucio, hecho de parche, sobre parche, sobre parche.

En cuánto al estilo de código, siempre que éste sea coherente, claro y agradable a la vista, no tengo objeción.


Título: Re: C vs C++ [Civil War]
Publicado por: Eternal Idol en 4 Mayo 2016, 00:27 am
Cuando aprendi programación iniciamos con orientado a objetos y despues ejemplos en C estandar y me agradaban mas los ejemplos sencillos en C, me gustaba tener mas control de la memoria y programar a mas bajo nivel.

Sabiendo que todo lo que hagas en C lo podes hacer en C++ no hay mucho como para discutir, con solo usar namespaces ya se obtiene una mejor organizacion del codigo, si a eso se le suman los paradigmas nuevos (como POO y programacion generica) y demas (la sobrecarga es muy util tambien) entonces se le empieza a sacar jugo al lenguaje. Y no hay ninguna razon para que C tenga mas control que C++ por ejemplo en un modulo de modo Kernel para Windows (normalmente llamado driver) tenes por fuerza que sobrecargar el operador new (llamando a la rutina principal del Kernel que reserva memoria) y ademas podes hacerlo de manera que un parametro adicional indique si la memoria sera paginable o no.

Esta simplicidad me encanta:
Código
  1. ...
  2. {
  3.  mutex_holder lock(mt); //contructor adquiere mutex
  4.  ++recurso;
  5. } //destructor libera mutex
  6. ...
  7.  


Título: Re: C vs C++ [Civil War]
Publicado por: MAFUS en 4 Mayo 2016, 01:00 am
Sí, la POO y los genéricos quitan mucha carga al programador y tal, pero la sintaxys de C++ me sigue preciendo muy engorrosa. Hace años microsoft tenía un proyecto de un C# que compilaba directamente a código nativo. Desconozco si ha tenido continuidad, pero es una lástima que no se haya hechi de dominio público. Me gustaba mucho C# y podría haberse convertido en el lenguaje de mi preferencia. No hubo suerte.


Título: Re: C vs C++ [Civil War]
Publicado por: crack81 en 4 Mayo 2016, 01:16 am
Con respecto a esto "A muchos no les gusta o no entienden los punteros " creo que el origen es la forma en que se ensena, personalmente me gusta mas la  forma que implementa los punteros pascal principalmente para los que se estan iniciando en programacion, pero ya que se entienden son "faciles" de implementar.


Título: Re: C vs C++ [Civil War]
Publicado por: HardForo en 4 Mayo 2016, 02:38 am
Pascal pasa los punteros por referencia mientras que C por copia, cierto ?


Título: Re: C vs C++ [Civil War]
Publicado por: crack81 en 4 Mayo 2016, 06:07 am
Hola @boctulus en C no existen las referencias solo punteros encambio en pascal o c++ existe el concepto puntero y referencia, inclusive c++ incluye algunos otros conceptos como referencia a puntero el equivalente en C podria ser un puntero doble a diferencia de estos dos ultimos en pascal no se usan los punteros de manera indiscriminada solo cuando es necesario.

Ejemplos

paso por referencia en C
Código
  1. void foo(int *value){
  2.   *value=10;
  3. }
  4.  
  5. int main()
  6. {
  7.    int value=5;
  8.    //simula el paso por referencia
  9.    foo(&value);
  10.    printf("%d",value);
  11.  
  12.    return 0;
  13. }
  14.  

En C++

Código
  1. void foo(int &value){
  2.   value=10;
  3. }
  4.  
  5. int main(){
  6.  
  7.    int value=5;
  8.    foo(value);
  9.    cout<<value<<endl;
  10.    return 0;
  11. }
  12.  

En  Pascal

Código
  1. procedure foo(var value:Integer);
  2. begin
  3.  value:=10;
  4. end;
  5.  
  6. var
  7.  value:Integer;
  8. begin
  9.  value:=5;
  10.  foo(value);
  11.  WriteLn(value);
  12. end.
  13.  


Título: Re: C vs C++ [Civil War]
Publicado por: AlbertoBSD en 4 Mayo 2016, 14:50 pm
Interesante lo que comentas  crack81, yo nunca use pascal.

 ;-) ;-) ;-) MAFUS es de los que piensan como yo.

Lo unico que le envidio a C++ es la facilidad de concatenar cadenas, tengo mi propia implementacion con funcion de argumentos variables...
Código
  1. char *funcion(char *format,...){
  2. ..
  3. }

En el trabajo actualmente programo en C# bajo windows y llegando a mi caso en C bajo FreeBSD XD.

Saludos.


Título: Re: C vs C++ [Civil War]
Publicado por: class_OpenGL en 4 Mayo 2016, 15:27 pm
Para concatenar cadenas, ¿no puedes usar sscanf?


Título: Re: C vs C++ [Civil War]
Publicado por: AlbertoBSD en 4 Mayo 2016, 16:08 pm
sscanf es para separar la cadena de acuardo a un formato dado y almacenar dichos datos en variables individuales.

La funcion que comento usa snprintf  o vsprintf que es lo opuesto toma variables indivuduales y las junta en una sola cadena de acuerdo a u  formato dado. Yo lo uso en una funcion aparte para que la funcion se encarge de reservar memoria acorde a los parametros dados...


Título: Re: C vs C++ [Civil War]
Publicado por: class_OpenGL en 4 Mayo 2016, 16:36 pm
Eso me pasa por las prisas xD En cualquier caso, es muy sencillo usar sprintf para concatenar cadenas


Título: Re: C vs C++ [Civil War]
Publicado por: geeke en 4 Mayo 2016, 17:21 pm
Si pero hay que tener cuidado con esta, porque no comprueba el limite del buffer por lo tanto fácilmente podríamos escribir mas allá de lo permitido (desbordamiento de buffer). Esto no pasaría con snprintf porque tiene un parámetro adicional que índica el numero máximo de bytes a escribir


Título: Re: C vs C++ [Civil War]
Publicado por: AlbertoBSD en 4 Mayo 2016, 17:33 pm
Concuerdo con Geeke, de hecho que bueno que lo menciona, mi código actual es este:

Código
  1. char *concat(char *s,...) {
  2. va_list args;
  3. char *buffer;
  4. buffer = calloc(strlen(s)*1000,sizeof(char));
  5. va_start(args, s);
  6. vsprintf(buffer,s, args);
  7. va_end(args);
  8. return buffer;
  9. }

Lo voy a cambiar por:

Código
  1. char *concat(char *s,...) {
  2. va_list args;
  3. unsigned int l;
  4. char *buffer;
  5. l = strlen(s)*1000;
  6. buffer = calloc(l,sizeof(char));
  7. va_start(args, s);
  8. vsprintf(buffer,l,s, args);
  9. va_end(args);
  10. return buffer;
  11. }


Título: Re: C vs C++ [Civil War]
Publicado por: + 1 Oculto(s) en 4 Mayo 2016, 23:51 pm
programo en php, java, js, ahora estoy poniendo mucho empeño en c++, anterior mente hice algunas cosas pequeñas en c++ y me gusto mucho

c++ es la ley


Título: Re: C vs C++ [Civil War]
Publicado por: class_OpenGL en 5 Mayo 2016, 00:05 am
Lo que más me gusta de C++, con diferencia, es la sobrecarga y el paso por referencia... Cuando digo sobrecarga, digo tanto sobrecarga de operadores como de funciones