Autor Tema: Dudas sobre la programación en C  (Leído 5765 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Dudas sobre la programación en C
« en: 13 de Agosto de 2015, 06:18:21 »
Hola a todos, pues a medida que voy profundizando en la programación en C más dudas atacan mi mente.

A ver si me explico bien:

Estoy utilizando en compilador C18 y recientemente me he metido un poco con arduino y veo cosas que me dejan a si   :shock:

Creo que el lenguaje de arduino es C++ y el de c18 es ANSI C, ¿estoy en lo cierto?.

Es que el tema de las clases, contructor y todo eso me pierde, por lo cual pregunto, ¿en c18 también se puede construir ese tipo de objetos o se puede hacer algo parecido?

He leído que las estructuras son similares a las clases pero no sé si esto es solo en C++ ya que la mayoría de tutoriales que hay en la red siempre acaban en el lenguaje C++.

Otra cosa que no comprendo muy bien son las estructuras en C, ¿donde se deven de declarar?, ¿cómo se llama a un elemento de una estructura?, se que para llamar un elemento de una estructura por ejemplo.

Código: [Seleccionar]
struct prueba{
              int a;
              int b;
              char c;
        } myPrueba;

se hace de esta manera.
Código: [Seleccionar]
myPrueba.a = 10;
Pero tengo dudas de donde declararlas si en xx.c o en xx.h, es que he visto programas donde se declaran en el .h pero cuando yo hago algún ejemplo me da error, me dice que myPrueba tiene varios argumentos o algo de eso

Otra duda con las estructuras es que le leído que una función puede devolver una estructura ¿cómo es eso  :shock:?.

Más dudas con las estructuras, ¿cómo puedo usar los datos de una estructura dentro de una función ajena de esa estructura?, sé que en variables si las haces globales tienes que definir esas variables en la función, ejemplo, si declaro una variable global
Código: [Seleccionar]
int ab; en la función tengo que declararla así
Código: [Seleccionar]
extern int ab;, ¿cómo sería con las estructuras?

y seguro que me aparecerán más dudas...  :oops:

gracias por la ayuda de ante mano
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Dudas sobre la programación en C
« Respuesta #1 en: 13 de Agosto de 2015, 09:27:50 »
Ufff, voy a intentar responder lo que se

Citar
Es que el tema de las clases, contructor y todo eso me pierde, por lo cual pregunto, ¿en c18 también se puede construir ese tipo de objetos o se puede hacer algo parecido?

No, El unico que posee Clases es C++, podes directamente hacer funciones, un ejemplo de un TFT declarado como clase:


Código: C++
  1. myTFT::Init()
  2. myTFT::DibujarRectangulo(x,y,x2,y2,fill);

Esto es que cada funcion, Init y Dibuja Rectangulo pertenenecen a myTFT, utilizan las variables de myTFT. Algunas como por ejemeplo este ejemplito:

Código: C
  1. class Rectangle {
  2.     int width, height;
  3.   public:
  4.     void set_values (int,int);
  5.     int area() {return width*height;}
  6. };
  7.  
  8. void Rectangle::set_values (int x, int y) {
  9.   width = x;
  10.   height = y;
  11. }
  12.  
  13. int main () {
  14.   Rectangle rect;
  15.   rect.set_values (3,4);
  16. }

Si te fijas en el main, hacen que "rect" tome como una copia de todas las variables y funciones definidas en la clase.
Es decir cuando lo definis, rect pasa a tener un rect.width , un rect.weigth , que si agrego otra y hago un Rectangle otravariable, esa nueva variable va a tener su "copia" de las variables anteriores entonces rect.width != otravariable.width. Todo esto se puede omitir para C.

Podes definir una estructura tal como hiciste y asignarle a cada una de tus variables esos valores.
Lo unico que no vas a encontrar comparacion es el uso del scope public y private, que en ANSI C el scope son 3 nomas: block (dentro de la funcion),file (static, osimplemente nad),global (extern).

Finalmente un "equivalente" en C seria directamente crear las 2 funciones como siempre lo hiciste, hacer una estructura con las variables width,heigth. Y listo definir las varaibles y llamar a las funciones.

-------------------------

Estructuras, en realidad seria algo mas asi:

Código: C
  1. struct prueba{               // Asi se declara una estructura , esto no ocupa espacio simplemente es la declaracion asi que esto podria ir en el xx.h
  2.               int a;
  3.               int b;
  4.               char c;
  5.               int *d;
  6. };
  7.  
  8. typedef prueba myPrueba;      // Esto es asignar un "tipo" asi como tenes int,long,etc al tag prueba, es decir que cuando te refieras a myPrueba estas apuntando a toda la estructura, este creo que no se puede poner en el .h ya que si se incluye varias veces estarias difiniendo muchas veces a myPrueba y resultaria en un error, al menos es lo que me paso a mi.
  9.  
  10. struct prueba Variable1;      // Caso de no usar typedef, para definir una variable
  11. myPrueba Variable;            // Principal uso de typedef, para no repetir por todos lados el "struct tag_name"
  12. Variable.a = 10;                // Finalmente accedemos al elemento de la Variable
  13.  
  14. struct prueba *punteroVar;
  15. punteroVar = &Variable
  16.  
  17. punteroVar->d=5;                 // Estas ultimas 2 son equivalentes, es para el caso de los punteros y queda mas facil de entender el de abajo. Para no agregar un "->" a la cabeza mas.
  18. (*punteroVar).d=5;

En mi poca experiencia me encontre con esos problemas, de no poder poner el typedef en el .h, especialmente cuando lo incluyo en varios lados a pesar que no use las estructuras de ahi.
La mayoria recomienda no usar el typedef para saber exactamente que se trata de una estructura y por otro tema de punteros. Pero por comodidad lo usas.

Tambien podes hacer TODO junto el typedef y la definicion de la estructura

Código: C
  1. typedef struct prueba{
  2.               int a;
  3.               int b;
  4.               char c;
  5.         } myPrueba;

Pero si va en el .h tendrias ese problema.
Algo interesante que me ocurrio, es que por ahi tenia que pasar algunas struct por alguna funcion, como lo tenia con el typedef no me dejaba entonces no me quedo otra que poner sus prototipos en el .c ( ya que no los usaba en el .h) y use el typedef antes de haber definido la estructura.

Citar
Otra duda con las estructuras es que le leído que una función puede devolver una estructura ¿cómo es eso ?.

Yo no se si devolveria una estructura, prefiero pasarle el puntero a esa estructura y ahi cambiar todo. Pero si aun asi queres devolver una estructura, dejo un ejemplo:

Código: C
  1. #include <stdio.h>
  2.  
  3. struct a {
  4.    int i;
  5. };
  6.  
  7. struct a f(struct a x)
  8. {
  9.    struct a r = x;
  10.    return r;
  11. }
  12.  
  13. int main(void)
  14. {
  15.    struct a x = { 12 };
  16.    struct a y = f(x);
  17.    printf("%d\n", y.i);
  18.    return 0;
  19. }

Y este ejemplo seria pasandolo como argumento:


Código: C
  1. struct a {
  2.    int i;
  3. };
  4.  
  5. void f(struct a *y)
  6. {
  7.    y->i=30;   // Es lo mismo que (*y).i
  8. }
  9.  
  10. int main(void)
  11. {
  12.    struct a x = { 12 };
  13.    f(&x);
  14.    printf("%d\n", x.i);
  15. }

Citar
Más dudas con las estructuras, ¿cómo puedo usar los datos de una estructura dentro de una función ajena de esa estructura?, sé que en variables si las haces globales tienes que definir esas variables en la función, ejemplo, si declaro una variable global
Si es global entonces no vas a tener problemas, sino vas a tener que pasarle el puntero a la estructura. Tal como el caso anterior

Dudas que te pueden salir tambien (que se me ocurrieron en el momento)

¿Puedo poner una funcion dentro de una estructura?
NO se puede poner funciones en las estructuras en C. Lo que si he visto y usado es un puntero a una funcion.

Código: C
  1. void Funcion1(x,i)
  2. {
  3.   x=10;
  4.   i=20;
  5. }
  6.  
  7. struct test {
  8.   int *punterofuncion;
  9.   int b;
  10.   char c;
  11. }
  12.  
  13. void main(){
  14.   struct test Variable;
  15.   Variable = {(int)&Funcion1,100,'a'};
  16.   Variable.(*punterofuncion)(2,10);   //Estoy con que deberia funcionar asi
  17. }
« Última modificación: 13 de Agosto de 2015, 10:33:09 por KILLERJC »

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2980
Re: Dudas sobre la programación en C
« Respuesta #2 en: 13 de Agosto de 2015, 09:47:47 »
Me csgo en la leche, me he pasado media hora escribiendo explicando y no me lo ha publicado y le doy para atrás y me da error :(

Bueno total ya te lo ha explicado killer  :D

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Dudas sobre la programación en C
« Respuesta #3 en: 13 de Agosto de 2015, 09:54:05 »
Me csgo en la leche, me he pasado media hora escribiendo explicando y no me lo ha publicado y le doy para atrás y me da error :(

Bueno total ya te lo ha explicado killer  :D

Me supo pasar... y encima recien le daba publicar y me ponia unos tag de code al principio, lo mande como 3 veces hasta que se me ocurrio moverlo a un bloc de notas y revisarlo ahi, para darme cuenta que me habia saltado un tag de code, entonces el foro lo agregaba solo xD

PD: Fijate si hay algo mal, que seguro lo hay, asi de paso se le dice bien a thulsa y aprendo de mi error.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2980
Re: Dudas sobre la programación en C
« Respuesta #4 en: 13 de Agosto de 2015, 12:49:40 »
Citar
Me supo pasar... y encima recien le daba publicar y me ponia unos tag de code al principio, lo mande como 3 veces hasta que se me ocurrio moverlo a un bloc de notas y revisarlo ahi, para darme cuenta que me habia saltado un tag de code, entonces el foro lo agregaba solo xD

PD: Fijate si hay algo mal, que seguro lo hay, asi de paso se le dice bien a thulsa y aprendo de mi error.

lo que dices es casi todo correcto, KILLERJC, pero en programación hay muchos puntos de vista, mi punto de vista es que creo que le estas hablando de algo bastante complicado a alguien que si no me equivoco esta aprendiendo y creo que tiene problemas de conceptos.

voy a exponer algunas cosas, simplemente para agrandar lo que te ha dicho KILLER no para corregir nada por que esta bien.


bueno, creo que lo que intentas aprender es C, por eso te daría como consejo que te olvides por completo de C++, olvidate de clases de objetos... de todo lo que sea C++ por que te vas a liar.
por otra parte si lo que quieres es aprender C para microcontroladores, No C18 no tiene C++, pero XC32 por ejemplo si te permite usarlo, pero como te digo yo me olvidaría de momento de eso.


Citar
Más dudas con las estructuras, ¿cómo puedo usar los datos de una estructura dentro de una función ajena de esa estructura?, sé que en variables si las haces globales tienes que definir esas variables en la función, ejemplo, si declaro una variable global
Código:
int ab;
en la función tengo que declararla así
Código:
extern int ab;
, ¿cómo sería con las estructuras?

esto concepto esta mal, si tu tienes una variables global, la puedes usar dentro de cualquier función del mismo fichero, y no tienes que definirla dentro de la funcion como extern

existen variables globales que se pueden usar en todo el .c  y las locales que las declaras, dentro de una función, y estas variables solo existen dentro de esta función. por ejemplo:

Código: [Seleccionar]
void funcion1(void)
{
    unsigned char variable1=0;
}

la "variable1" solo existe dentro de la "funcion1" y no podrás usarla dentro de ninguna otra función, esta variable se destruirá cada vez que se salga de la función. si no quieres que se pierda el valor cuando salga de la funcion deberas declararla como "static unsigned char variable1" de esta manera no se perderá el valor y cuando vuelva a entrar en la función mantendrá su valor.


lo mismo pasa con las estructuras, si la declaras global, esta disponible en todo el fichero .c, si solo la declaras en una función solo estará en esa función.

hasta aqui bien?

lo de "extern" el termino extern se utiliza cuando una variable globar esta declarada en otro fichero ejemplo:

imagina que tenemos un fichero que se llama main.c  y dentro es de esta manera de esta manera:

Código: [Seleccionar]
unsigned char global1=0;
void main(void)
{
   while(true){}
}

tenemos una variable global llamada "global1" disponible para todas las funciones de main.c

pero tenemos otro fichero llamado libreria.c que es asi:

Código: [Seleccionar]

extern unsigned char global1;

void funcion(void)
{
}

ahora la variable global de main.c esta tambien disponible en libreria.c pero la directiva extern le ha dicho que esta declarada en otro lado (fijate que no se inicializa, por que se estaria inicializando en dos sitios y eso no puede ser)

Citar
Pero tengo dudas de donde declararlas si en xx.c o en xx.h, es que he visto programas donde se declaran en el .h pero cuando yo hago algún ejemplo me da error, me dice que myPrueba tiene varios argumentos o algo de eso

esto seguramente has creado tu estructura en un .h y llamas al .h mas de una vez o algo por el estilo.

te recomiendo te bajes esto :

http://www.todopic.com.ar/foros/index.php?topic=44931.0

el archivo v0.9.zip, hay se hacen uso intensivo de estructuras definidas en .h se crean en otros ficheros, se llaman en funciones etc. tendrás casi todos los ejemplos posibles, incluso de vectores dentro de estructuras.

y así al menos este fichero le servirá a alguien por que no lo ha querido nadie hahaha.

parece que la base de creación de estructuras y tal lo tienes mas o menos claro pero fallas en algunos conceptos y esos creo que son tus problemas

lo de los punteros que te menciona KILLER es muy buena herramienta, de lo mejor que tiene C, pero no creo que hayas llegado a estudiarlos todavía.

repasate los conceptos de funciones y variables globales y locales creo que te vendrá bien.

un saludo
« Última modificación: 13 de Agosto de 2015, 12:54:06 por juaperser1 »

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re: Dudas sobre la programación en C
« Respuesta #5 en: 13 de Agosto de 2015, 13:51:49 »
Hoooola, gracias por emplear vuestro tiempo en explicarme todo esto, la verdad que el tema de las funciones, variables y todo eso si que lo domino más o menos, aveces cometo algún error porque se me escapa pero bueno como dicen... de los errores se aprende...oooo no  :D :D :D

La verdad que me dejan así  :shock:, yo pensaba que los punteros eran complicados pero cuando toque las estructuras y uniones flipé, esto tendré que ir asimilándolo poco a poco.
Me he metido con todo esto de las clases porque he de confesar que he robado algún código que otro de arduino y lo he estado adaptando a C18 y de momento funciona bien, pero quería profundizar más y hacer mi código más eficiente y profesional y al ver el tema de las clases y constructores me hizo pensar.

Bueno ya tengo claro muchas cosas ahora me toca fajarme y si sale alguna duda, con vuestro premiso os consultaré.

Graciassssssss  ((:-)) ((:-))
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2980
Re: Dudas sobre la programación en C
« Respuesta #6 en: 13 de Agosto de 2015, 14:35:27 »
Thulsa doom ten en cuenta que arduinó es una cosa, que se podría atribuir mas al mundo de los informáticos que suelen saber menos de electrónica, si quieres aprender electrónica no te fijes mucho en arduino. Y si quieres portar código de lo que hace arduino, cuidado porque eso no se puede considerar C exactamente y te puedes liar además de que te extrae mucho mucho del hardware.

Un saludo.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re: Dudas sobre la programación en C
« Respuesta #7 en: 13 de Agosto de 2015, 14:47:24 »
Lo tengo en cuenta, yo me construyo mis propias placas y eso si que no te lo cambio por nada.
Portando código me he dado cuenta de muchos errores que comenten al desarrollar un código como puede ser los delays que la peña lo utiliza mucho y a mi no me gusta un pelo, cuando veo un delay de esos lo sistutuyo por la rutina tickget() que utiliza el timer0 para contar tiempos.

Bueno lo que he portado son poca cosa como la lectura de termistores que incluía la formula para el calculo de la temperatura y la verdad que tira bien y pocas cosas más, alguna sonda, por lo demás como pueden ser memorias spi, protocolos tcpip y todo eso o lo desarrollo yo con el datasheet del fabricante a mano o utilizo las librerías que microchip tiene para sus productos.

Lo que a la hora de ver el código en arduino me despertó la curiosidad de intentar hacer el código más eficiente, agrupar y automatizar más mis códigos y como nunca he usado las estructuras pues surgió la duda y ahora las estoy estudiando porque veo que son muy potentes y flexibles.

Bueno... cosas de novatos jajajajajaja
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re: Dudas sobre la programación en C
« Respuesta #8 en: 14 de Agosto de 2015, 13:53:59 »
Hooooooola, pues después de batallar un poco, bueno un poco no, muucho  :) con este tema y creo que ya estoy empezando a dominarlo.
Expongo lo que tengo hasta ahora a ver si mis conceptos no están equivocados.

Hay varias maneras de crear un estructura y todas tiene el mismo resultado, está la forma más clásica y sencilla que es esta.
Código: [Seleccionar]
struct Nombre{
  int a;
  float b;
  char c[5];
};
luego tendremos que añadir un identificador a esa estructura para poder trabajar con ella, de esta manera:
Código: [Seleccionar]
struct nombre MYS_DATOS;
La segunda forma de crear la misma estructura:
Código: [Seleccionar]
struct Nombre{
   int a;
   float b;
  char c[5];
}MYS_DATOS;

De esta forma ya nos hemos ahorrado el paso de crear el identificador por separado, pero esto no queda ahí, podemos identificar la estructura con un nombre y así no tener que poner struct cada vez que queramos añadir un nuevo identificador, se puede hacer esto de dos formas.

Ampliando el primer ejemplo de esta manera:
Código: [Seleccionar]
struct Nombre{
  int a;
  float b;
  char c[5];
};

typedef struct nombre MYS_DATOS;

O haciéndolo todo de un golpe al crear la estructura
Código: [Seleccionar]
typedef struct Nombre{
  int a;
  float b;
  char c[5];
}MYS_DATOS;

Una vez creamos la estructura tendremos que asignarle una variable para poder trabajar con ella, la forma es la siguiente (utilizando el último ejemplo de creación de estructuras)

Código: [Seleccionar]
MYS_DATOS  myDato;
Ahora para trabajar con cada mienbro de la estructura utilizaremos myDato para ello, por ejemplo para añadir un número a la variable (a).
Código: [Seleccionar]
myDato.a = 100;
Se pueden declarar las estructuras en los ficheros de cabecera .h pero no se puede declarare la variable, solo el nombre y el identificador, si declaramos la variable nos dará un error de definición de variable en las de un sitio, la forma es la siguiente.
Se crea la estructura en en .h por ejemplo esta:

Código: [Seleccionar]
typedef struct Nombre{
  int a;
  float b;
  char c[5];
}MYS_DATOS;

En el archivo fuente que corresponda esa estructura declaramos la variable por ejemplo así:
Código: [Seleccionar]
MYS_DATOS  myDato;y si utilizamos esa estructura en más de un fichero fuente tendremos que declarar la variable en la cabecera del archivo de esta manera.
Código: [Seleccionar]
extern MYS_DATOS  myDato;
Ojo todo esto si la estructura es global.

Si declaro la estructura en el fichero fuente (x.c) si intento utilizar esa estructura fuera de ese fichero no va, ni nombrando la variable externa

Si me falta algo o sobra algo o está mal algo ruego me corrijan  :D
« Última modificación: 14 de Agosto de 2015, 15:59:16 por Thulsa Doom »
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2980
Re: Dudas sobre la programación en C
« Respuesta #9 en: 14 de Agosto de 2015, 16:24:15 »
Ahora si, perfecto  ;-) veo que has comprendido muy bien el uso de structuras y la manera de trabajar con ellas, enorabuena sigue asi ((:-))

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: Dudas sobre la programación en C
« Respuesta #10 en: 14 de Agosto de 2015, 17:54:52 »
Me he metido con todo esto de las clases porque he de confesar que he robado algún código que otro de arduino y lo he estado adaptando a C18 y de momento funciona bien, pero quería profundizar más y hacer mi código más eficiente y profesional y al ver el tema de las clases y constructores me hizo pensar.

Arduino utiliza GNU C++
Los PIC utilizan C.
El C++ es mas amplio que el C. C++ añade programación orientada a objetos (clases y cosas así) que no se pueden programar en C.

Saludos.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re: Dudas sobre la programación en C
« Respuesta #11 en: 15 de Agosto de 2015, 06:33:17 »
Ahora si, perfecto  ;-) veo que has comprendido muy bien el uso de structuras y la manera de trabajar con ellas, enorabuena sigue asi ((:-))

Gracias a vosotros pos la ayuda, sin ello lo entendería pero seguramente muuuuuuuuuucho más tarde  :D

Gracias Picuino, la verdad que no sabía bien la diferencia entre C y C++, sabía que era orientada a objetos pero no lo entendía
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Dudas sobre la programación en C
« Respuesta #12 en: 15 de Agosto de 2015, 06:46:30 »
Y por si fuera poco, también existe C#
https://es.wikipedia.org/wiki/C_Sharp

Es una variante de Microsoft que también fue aprobado como estándar.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re: Dudas sobre la programación en C
« Respuesta #13 en: 15 de Agosto de 2015, 07:36:43 »
Y por si fuera poco, también existe C#
https://es.wikipedia.org/wiki/C_Sharp

Es una variante de Microsoft que también fue aprobado como estándar.

Tooomalo, :shock:   no tenía ni idea, es más yo pensaba que el lenguaje c era el C y el C++ y ya está y todos los demás como java, pithon y todos esos son variantes del C++, y también pensaba o creía que para referirse al C era como C# jajajaja que ignorante soy y que complejo es este mundo.

Muchas gracias
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2980
Re: Dudas sobre la programación en C
« Respuesta #14 en: 15 de Agosto de 2015, 09:47:15 »
Pues anda que no hay lenguajes Haha una infinidad, unos son la base de otros, otros son completamente diferentes, unos son compilados, otros interpretados, unos secuenciales, otros programación objeto, todos con sus ventajas e inconvenientes, unos mas utilizados y otros menos, pero todos importantes en algún campo, y si no contamos los lenguajes de FPGA.

Por cierto si quieres después de aprender C y quieres aprender objeto, yo por ejemplo soy muy bueno en C# es un lenguaje muy facilito,  si quieres aprender, aunque te recomiendo mas C++ con QT para la programación objeto.

Pero saber C estándar te ayudara a comprender mucho mejor los otros. Y tienen muchas cosas en común.

Un saludo.