Gabatarwa zuwa Harshen C - Babban Jagora

Sabuntawa na karshe: Disamba 1 na 2025
  • Ƙarfafawa da ƙananan sarrafawa: C yana ba da damar kai tsaye zuwa ƙwaƙwalwar ajiya da hardware, manufa don tsarin aiki da aikace-aikace.
  • Abun iya ɗauka da ƙa'idodi: C yana ba da damar haɗa lamba akan dandamali da yawa kuma an samo asali ta hanyar ƙa'idodi (K&R, ANSI C, C99, C11, C17).
  • Masu nuni da sarrafa ƙwaƙwalwar ajiya: Suna ba da sassauci da ƙarfi, amma suna buƙatar kulawa da hankali don guje wa ɗigogi da kurakurai masu mahimmanci.
  • Aikace-aikace da gaba: C yana mamaye tsarin aiki, tsarin da aka haɗa da babban aiki; za ta ci gaba da wanzuwa tare da harsunan zamani.
Gabatarwa zuwa Harshen C

Harshen C yana ɗaya daga cikin ginshiƙan ginshiƙan shirye-shiryen zamani. Dennis Ritchie ne ya ƙirƙira a cikin 1970s a Bell Labs, C ya bar alamar da ba za a iya mantawa da ita ba a duniyar haɓaka software. Gabatarwa ga harshen C yana da mahimmanci don fahimtar tasirinsa, kamar yadda yawancin shahararrun harsuna a yau, irin su C++, Java, da Python, sun gaji bangarori na rubutunsa da falsafar.

Amma menene ya sa C ya zama na musamman? Da farko, ingancinsa da iko. C yana ba masu shirye-shirye damar samun madaidaicin iko akan kayan aiki, yana mai da shi manufa don haɓaka tsarin aiki, direbobin na'ura, da aikace-aikacen da ke buƙatar ingantaccen aiki. Bugu da ƙari, sauƙi na dangi da kuma ɗaukaka mai faɗi ya sa ya zama kyakkyawan wurin farawa ga waɗanda ke neman zurfafa cikin duniyar shirye-shiryen ƙananan matakai. Gabatarwa zuwa harshe C yana haskaka waɗannan fa'idodin kuma ya nuna dalilin da yasa ya kasance dacewa a yau.

Gabatarwa zuwa Harshen C

A cikin wannan labarin, za mu warware muhimman abubuwan da suka shafi farawa da yaren C, tun daga ainihin abubuwan da za ku iya ɗauka a cikin shirye-shiryenku na farko, ko kun kasance mafari mai ban sha'awa ko kuma ƙwararren mai tsara shirye-shirye da ke neman faɗaɗa tunanin ku, wannan tafiya zuwa duniyar C za ta samar muku da ingantaccen tushe don ci gaban ku a matsayin mai tsara shirye-shirye.

Tarihi da Juyin Halitta na Harshen C

Harshen C bai fito daga waje ba. Ƙirƙirar sa yana da alaƙa da tarihin kwamfuta da haɓaka tsarin aiki. Dennis Ritchie, Yin aiki a AT&T's Bell Laboratories, ci gaba C a matsayin juyin halitta na harshen B, wanda Ken Thompson ya kirkira.

An haifi C saboda buƙatar harshen da ke da inganci da ɗaukakawa. A wancan lokacin, yawancin harsunan shirye-shirye an tsara su ne don takamaiman kayan gine-ginen kayan aiki, wanda ya sa ikon ɗaukar lambar ya yi wahala. C ya keta wannan iyakancewa, yana ba da damar rubuta shirye-shiryen da za a iya haɗawa da aiki akan nau'ikan inji daban-daban tare da ƙananan canje-canje.

Wani muhimmin ci gaba a cikin tarihin C shine amfani da shi don sake rubutawa UNIX tsarin aiki. Wannan matakin ya nuna ƙarfi da sassaucin harshe, tare da kafa shi a matsayin kayan aiki na asali don haɓaka tsarin.

A cikin shekaru, C ya samo asali ta hanyoyi da yawa:

  1. K&R C: Asalin sigar da aka bayyana a cikin littafin “Creerming Language” na Brian Kernighan da Dennis Ritchie.
  2. ANSI C (C89/C90): Haɓaka harshe na farko na hukuma.
  3. C99: An ƙaddamar da sabbin abubuwa kamar nau'in _bool da goyan bayan maganganun layi ɗaya.
  4. C11: Ƙara goyon baya don shirye-shiryen multithreaded da inganta tsaro.
  5. C17: Sigar baya-bayan nan, wanda galibi yana gyara kurakurai da fayyace shubuha.

Duk da shekarunsa, C ya kasance muhimmin harshe a ci gaban software na zamani. Tasirinsa ya wuce kansa, saboda ya kasance tushen ci gaban wasu. shahararrun harsuna kamar C++, Objective-C, kuma zuwa wani lokaci, Java da C #.

Mabuɗin Siffofin C

Harshen C yana bambanta da fasali da yawa waɗanda suka kiyaye shi shekaru da yawa. Fahimtar waɗannan fasalulluka yana da mahimmanci ga kowane mai shirya shirye-shirye da ke shiga duniyar C.

  1. Amfani: C yana ba da damar sarrafawa daidai akan kayan aiki, yana haifar da ingantaccen shirye-shirye. Wannan fasalin ya sa ya dace don aikace-aikacen da ke buƙatar aiki mafi kyau.
  2. Aukar hoto: Shirye-shiryen da aka rubuta a cikin C za a iya haɗa su kuma a gudanar da su a kan dandamali daban-daban tare da ƙananan canje-canje, yin sauƙi giciye dandamali software ci gaban.
  3. Sassauci: C yana ba da nau'ikan fasali waɗanda ke ba masu shirye-shirye damar magance matsaloli ta hanyoyi daban-daban. Wannan sassauci, yayin da yake da ƙarfi, kuma yana buƙatar horo daga ɓangaren mai tsara shirye-shirye.
  4. Ƙananan damar shiga: C yana ba da damar yin amfani da ƙwaƙwalwar ajiya kai tsaye da bits, wanda ke da mahimmanci don haɓaka tsarin aiki da direbobin na'ura.
  5. Takaitacciyar magana: C syntax yana da sauƙin sauƙi kuma mai sauƙi, yana sauƙaƙa koya da karantawa.
  6. M misali ɗakin karatu: C ya zo tare da madaidaicin ɗakin karatu wanda ke ba da ayyuka don ayyuka na gama gari kamar shigarwa / fitarwa, magudin kirtani, da ayyukan lissafi.
  7. Taimako don tsara shirye-shirye: C yana ƙarfafa tsarin tsarin tsari, yana ba da damar rikiɗar matsaloli masu rikitarwa zuwa sassa da za a iya sarrafawa.

Waɗannan fasalulluka suna sa C ya zama madaidaicin harshe, mai ikon daidaitawa zuwa aikace-aikace iri-iri, daga tsarin da aka haɗa zuwa aikace-aikace masu inganci.

Muhalli na cigaba don C

Don fara shirye-shirye a cikin C, kuna buƙatar saita yanayin ci gaba mai dacewa. Wannan ya ƙunshi zabar da daidaita mai tarawa da editan rubutu ko Integrated Development Environment (IDE).

C Compilers

Mai tarawa kayan aiki ne mai mahimmanci wanda ke fassara lambar ku C a cikin harshe inji mai iya aiwatarwa. Wasu shahararrun masu tarawa sune:

  1. GCC (GNU Compiler Collection): Yana da kyauta, buɗe tushen kuma ana amfani dashi sosai akan tsarin Unix da Linux.
  2. Yin magana: Wani ɓangare na aikin LLVM, yana ba da saƙon kuskure masu haske kuma an san shi da saurin sa.
  3. Microsoft Visual C ++: Ya zo hadedde da Visual Studio kuma ana amfani da ko'ina a Windows muhallin.

Editocin Rubutu da IDEs

Kuna iya rubuta lambar C a cikin kowane editan rubutu, amma IDE mai kyau na iya inganta yawan amfanin ku. Wasu shahararrun zaɓuɓɓuka sune:

  1. Kayayyakin aikin hurumin kallo: Editan lambar kyauta kuma mai sauƙin daidaitawa tare da kyakkyawan tallafi ga C.
  2. Lambar :: Tubalan: A giciye-dandamali IDE tsara musamman don C da C++.
  3. zaki: IDE mai ƙarfi wanda JetBrains ya haɓaka, musamman mai amfani ga manyan ayyuka.

Don saita mahallin ku:

  1. Shigar da mai tarawa (misali, GCC akan Linux ko MinGW akan Windows).
  2. Zaɓi kuma shigar da editan rubutu ko IDE.
  3. Sanya editan ku/IDE don amfani da mai tarawa da aka shigar.
  4. Rubuta shirinku na farko "Sannu, duniya!" don tabbatar da cewa komai yana aiki daidai!
#include <stdio.h>

int main() {
    printf("¡Hola, mundo!\n");
    return 0;
}

Tare da saita yanayin ku, kuna shirye don nutsewa cikin duniyar shirye-shiryen C mai ban sha'awa.

Asalin Jumla da Tsarin Shirin C

C syntax shine tushe wanda aka gina hadaddun shirye-shirye akansa. Fahimtar da ainihin tsarin shirin a cikin C yana da mahimmanci ga kowane mai tsara shirye-shirye da ya fara cikin wannan yare.

Babban Tsarin

Shirin C yana da tsari mai zuwa:

#include <stdio.h>

int main() {
    // Tu código aquí
    return 0;
}

Bari mu rushe wannan tsari:

  1. Umarnin Preprocessor: Layukan farawa da # umarni ne ga mai aiwatarwa. #include <stdio.h> ya haɗa da daidaitaccen ɗakin karatu/fitarwa.
  2. main() aiki: Kowane shirin C dole ne ya kasance yana da aiki main(). Ita ce mashigar shigar shirin.
  3. Maɓallai {}: Suna iyakance tubalan code.
  4. comments: Ana amfani da su // don sharhin layi daya da /* */ don maganganun multiline.
  5. Jumloli: Kowane bayani a cikin C yana ƙarewa da ƙaramin yanki (;).

Maɓalli Maɓalli na Sintactic

  1. Masu Ganowa: Sunaye don masu canji, ayyuka, da sauransu. Dole ne su fara da harafi ko ƙaranci.
  2. Keywords: Kalmomin da aka tanada kamar int, if, while, wanda ke da ma'ana ta musamman a cikin C.
  3. Masu aiki: Alamomin da ke yin ayyuka, kamar +, -, *, /.
  4. Litattafai: Ma'auni na dindindin kamar lambobi ko igiyoyin rubutu.

Misali mai amfani

Bari mu kalli misali wanda ya ƙunshi abubuwa da yawa na syntactic:

#include <stdio.h>

int main() {
    int edad = 25;  // Declaración e inicialización de variable

    if (edad >= 18) {
        printf("Eres mayor de edad.\n");
    } else {
        printf("Eres menor de edad.\n");
    }

    return 0;
}

Wannan shirin yana nuna ƙayyadaddun furci, amfani da sharadi, da aikin printf() don bugawa zuwa na'ura mai kwakwalwa.

Ƙirƙirar asali na C syntax shine mataki na farko don rubuta shirye-shirye masu inganci da inganci. Yayin da kuke ci gaba, za ku gane cewa wannan da alama mai sauƙi yana ba ku damar gina hadaddun tsarin tsara shirye-shirye.

Canje-canje, Nau'in Bayanai da Masu aiki a cikin C

A cikin C, masu canji sune kwantena don adana bayanai, nau'ikan bayanai suna bayyana irin nau'in bayanan da mai canzawa zai iya riƙe, kuma masu aiki suna ba ku damar sarrafa wannan bayanan. Fahimtar waɗannan ra'ayoyi suna da mahimmanci don tsarawa da kyau a cikin C.

canji

A cikin C, dole ne ku ayyana maɓalli kafin amfani da shi, ƙayyadaddun nau'in sa. Misali:

int edad;
float altura;
char inicial;

Hakanan zaka iya fara fara canje-canje ta hanyar bayyana su:

int edad = 25;
float altura = 1.75;
char inicial = 'J';

Nau'in Bayanai na asali

C yana ba da nau'ikan bayanan farko da yawa:

  1. int: Domin lamba.
  2. taso kan ruwa: Don daidaitattun lambobi goma sha ɗaya.
  3. biyu: Don daidaitattun lambobi goma sha biyu.
  4. char: Don haruffa guda ɗaya.

Bugu da kari, akwai masu gyara irin su short, long, unsigned da za a iya amfani da wadannan asali iri.

Masu aiki

C yana ba da ma'aikata iri-iri don sarrafa bayanai:

  1. ilmin lissafi: +, -, *, /, % (module)
  2. Dangantaka: ==, !=, <, >, <=, >=
  3. ma'ana: && (DA), || (OR), ! (BA)
  4. aiki: =, +=, -=, *=, /=
  5. Ƙara / Rage: ++, --
  6. bitwise: &, |, ^, ~, <<, >>

Misali mai amfani

Bari mu kalli misalin da ke amfani da masu canji, nau'ikan bayanai daban-daban, da masu aiki:

#include <stdio.h>

int main() {
    int a = 10, b = 3;
    float resultado;

    resultado = (float)a / b;  // Casting para obtener resultado decimal

    printf("a + b = %d\n", a + b);
    printf("a - b = %d\n", a - b);
    printf("a * b = %d\n", a * b);
    printf("a / b = %.2f\n", resultado);

    if (a > b && a != 5) {
        printf("a es mayor que b y no es igual a 5\n");
    }

    return 0;
}

Wannan shirin yana nuna amfani da masu canji na nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan, ayyukan Ariya na Ariya, jefa, da masu hankali da kuma masu aiki.

Fahimtar yadda ake sarrafa masu canji, nau'ikan bayanai, da masu aiki yana da mahimmanci don rubuta ingantaccen shirye-shiryen C.

Gudanar da Yawo: Sharuɗɗa da madaukai

Gudanar da kwarara yana da mahimmanci a cikin shirye-shirye, saboda yana ba da damar shirye-shiryen mu don yanke shawara da maimaita ayyuka. A cikin C, ana samun wannan da farko ta hanyar gina jiki da madaukai.

Tsarin Yanayi

Tsarin tsari yana ba ku damar aiwatar da tubalan lamba daban-daban dangane da takamaiman yanayi.

idan-kuma

Tsarin if-else shine mafi asali:

if (condición) {
    // Código si la condición es verdadera
} else {
    // Código si la condición es falsa
}

Hakanan zaka iya amfani else if don yanayi da yawa:

if (condición1) {
    // Código si condición1 es verdadera
} else if (condición2) {
    // Código si condición2 es verdadera
} else {
    // Código si ninguna condición es verdadera
}

canza

Tsarin switch Yana da amfani idan kuna da lokuta da yawa dangane da ƙimar maɓalli:

switch (variable) {
    case valor1:
        // Código para valor1
        break;
    case valor2:
        // Código para valor2
        break;
    default:
        // Código si no coincide ningún caso
}

Madaukai

Madaukai suna ba ku damar maimaita toshe lambar sau da yawa.

  Tsare-tsaren Bayanin Talla: Sirrin Makamin Kamfanoni masu Mallake Masana'antu

domin

Madauki for Yana da kyau lokacin da kuka san adadin maimaitawa:

for (inicialización; condición; incremento) {
    // Código a repetir
}

yayin da

Madauki while Ana aiwatar da shi yayin da yanayin gaskiya ne:

while (condición) {
    // Código a repetir
}

yi-yayin

Mai kama da while, amma yana tabbatar da cewa an aiwatar da lambar aƙalla sau ɗaya:

do {
    // Código a repetir
} while (condición);

Misali mai amfani

Bari mu kalli misalin da ya haɗa sharuddan da madaukai:

#include <stdio.h>

int main() {
    int numero;

    printf("Ingresa un número entre 1 y 10: ");

        scanf("%d", &numero);

    if (numero < 1 || numero > 10) {
        printf("Número fuera de rango.\n");
    } else {
        printf("Tabla de multiplicar del %d:\n", numero);
        for (int i = 1; i <= 10; i++) {
            printf("%d x %d = %d\n", numero, i, numero * i);
        }
    }

    return 0;
 

Wannan shirin yana nuna amfani da if-else don tabbatar da shigarwar mai amfani da madauki for don samar da tebur mai yawa. Ingantacciyar haɗawa da sarrafa kwararar yanayi da maimaitawa.

Kwarewar waɗannan tsarin sarrafa kwarara yana da mahimmanci don ƙirƙirar shirye-shirye masu sassauƙa da ƙarfi a cikin C. Suna ba ku damar ƙirƙirar dabaru masu rikitarwa da sarrafa yanayi daban-daban a cikin aikace-aikacenku.

Ayyuka da Modularity a cikin C

Ayyuka su ne tubalan lambar da za a sake amfani da su waɗanda ke yin takamaiman ayyuka. Suna da mahimmanci ga shirye-shirye na yau da kullun, suna ba ku damar warware matsaloli masu rikitarwa zuwa sassa masu iya sarrafawa. A cikin C, ayyuka suna da mahimmanci musamman don kiyaye lambar tsari da inganci.

Tsarin Aiki

Aiki a cikin C yana da tsarin gaba ɗaya mai zuwa:

tipo_retorno nombre_funcion(tipo_parametro1 parametro1, tipo_parametro2 parametro2, ...) {
    // Cuerpo de la función
    return valor;
}
  • tipo_retorno: Yana da nau'in bayanan da aikin ke dawowa (amfani void idan bai dawo ba).
  • nombre_funcion: Shine mai gano aikin.
  • parametros: Waɗannan su ne ƙimar da aikin ke karɓa (za su iya zama sifili ko fiye).

Sanarwa vs Definition

A cikin C, ya zama ruwan dare don ayyana aiki kafin ayyana shi:

// Declaración (prototipo)
int suma(int a, int b);

int main() {
    int resultado = suma(5, 3);
    printf("Resultado: %d\n", resultado);
    return 0;
}

// Definición
int suma(int a, int b) {
    return a + b;
}

Wannan aikin yana ba ku damar amfani da ayyuka kafin cikakken ma'anar su, wanda ke da amfani a cikin manyan ayyuka.

Ma'auni da Ƙimar Komawa

Ayyuka na iya ɗaukar sigogi da dawo da ƙima:

int cuadrado(int x) {
    return x * x;
}

void saludar(char* nombre) {
    printf("Hola, %s!\n", nombre);
}

Ayyuka a cikin Standard Library

C yana ba da ayyuka masu amfani da yawa a daidaitaccen ɗakin karatu. Misali:

#include <stdio.h>
#include <math.h>

int main() {
    double numero = 16.0;
    double raiz = sqrt(numero);
    printf("La raíz cuadrada de %.2f es %.2f\n", numero, raiz);
    return 0;
}

Modularity and Code Organization

Ayyuka mabuɗin maɓalli ne a cikin C. Suna ba da izini:

  1. Sake amfani da lambar: Rubuta sau ɗaya, yi amfani da yawa.
  2. Zane: Boye bayanan aiwatarwa.
  3. Tsayawa: Yana sauƙaƙa ɗaukakawa da cire kuskuren lambar.
  4. Karatu: Yana sauƙaƙa fahimtar lambar.

Misali mai amfani

Bari mu kalli misalin da ke nuna yadda ake amfani da ayyuka don ƙirƙirar shirin na yau da kullun:

#include <stdio.h>

// Declaraciones de funciones
float celsius_a_fahrenheit(float celsius);
float fahrenheit_a_celsius(float fahrenheit);
void mostrar_menu();

int main() {
    int opcion;
    float temperatura;

    do {
        mostrar_menu();
        scanf("%d", &opcion);

        switch(opcion) {
            case 1:
                printf("Ingrese temperatura en Celsius: ");
                scanf("%f", &temperatura);
                printf("%.2f°C es igual a %.2f°F\n", temperatura, celsius_a_fahrenheit(temperatura));
                break;
            case 2:
                printf("Ingrese temperatura en Fahrenheit: ");
                scanf("%f", &temperatura);
                printf("%.2f°F es igual a %.2f°C\n", temperatura, fahrenheit_a_celsius(temperatura));
                break;
            case 3:
                printf("Saliendo del programa...\n");
                break;
            default:
                printf("Opción no válida\n");
        }
    } while(opcion != 3);

    return 0;
}

// Definiciones de funciones
float celsius_a_fahrenheit(float celsius) {
    return (celsius * 9/5) + 32;
}

float fahrenheit_a_celsius(float fahrenheit) {
    return (fahrenheit - 32) * 5/9;
}

void mostrar_menu() {
    printf("\nConversor de Temperatura\n");
    printf("1. Celsius a Fahrenheit\n");
    printf("2. Fahrenheit a Celsius\n");
    printf("3. Salir\n");
    printf("Elija una opción: ");
}

Wannan shirin yana nuna yadda za a iya amfani da ayyuka don ƙirƙirar ƙarin tsari da lambar da za a iya kiyayewa. Kowane aiki yana da takamaiman alhaki, wanda ke sa babban shirin ya zama mai tsabta kuma mafi fahimta.

Ingantaccen amfani da ayyuka yana da mahimmanci don rubuta ingantaccen tsari da tsare-tsaren C. Yayin da ayyukanku ke girma cikin sarƙaƙƙiya, ikon karya lambar ku zuwa ayyuka na yau da kullun za su ƙara zama masu daraja.

Manuniya da Gudanar da Ƙwaƙwalwar Ƙwaƙwalwa

Masu nuni suna ɗaya daga cikin mafi ƙarfi kuma sau da yawa ƙalubale ra'ayoyi a cikin C. Suna ba da iko kai tsaye akan ƙwaƙwalwar ajiya kuma suna da mahimmanci ga yawancin ayyukan ci gaba. Fahimtar alamomi yana da mahimmanci ga ƙwarewar C.

Menene Pointers?

Mai nuni shine mabambantan da ke adana adreshin ƙwaƙwalwar ajiya na wani maɓalli. A wasu kalmomi, yana "nuna" zuwa wurin da wani yanki yake a cikin ƙwaƙwalwar ajiya.

Bayyanawa da Amfani da Manuniya

Don ayyana mai nuni, ana amfani da mai aiki *:

int *ptr;  // Declara un puntero a un entero
int numero = 42;
ptr = &numero;  // Asigna la dirección de 'numero' a 'ptr'

Don samun damar ƙimar da mai nuna alama ke nunawa, ana amfani da ma'aikacin ƙetare. *:

printf("Valor: %d\n", *ptr);  // Imprime 42

Nunin Lissafi

C yana ba da damar yin ayyukan lissafi akan masu nuni:

int arr[] = {10, 20, 30, 40};
int *p = arr;

printf("%d\n", *p);     // Imprime 10
printf("%d\n", *(p+1)); // Imprime 20

Manubai da Arrays

A cikin C, tsararraki suna da alaƙa kusa da masu nuni:

int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;  // ptr apunta al primer elemento de arr

for (int i = 0; i < 5; i++) {
    printf("%d ", *(ptr + i));  // Imprime los elementos del array
}

Sarrafa Ƙwaƙwalwar Ƙwaƙwalwa

C yana ba ku damar rarraba ƙwaƙwalwar ajiya a hankali a lokacin aiki ta amfani da ayyuka kamar malloc(), calloc()da kuma realloc(). Dole ne a saki wannan ƙwaƙwalwar da hannu tare da free().

#include <stdlib.h>

int *ptr = (int*)malloc(5 * sizeof(int));  // Asigna memoria para 5 enteros

if (ptr == NULL) {
    printf("Error: no se pudo asignar memoria\n");
    return 1;
}

// Usar la memoria...

free(ptr);  // Liberar la memoria cuando ya no se necesita
ptr = NULL; // Buena práctica: asignar NULL después de liberar

Manufofin Ayyuka

C yana ba ku damar samun alamun aiki, waɗanda ke da amfani don sake kira da shirye-shiryen da ke gudana:

int suma(int a, int b) { return a + b; }
int resta(int a, int b) { return a - b; }

int (*operacion)(int, int);  // Declara un puntero a función

operacion = suma;
printf("Resultado: %d\n", operacion(5, 3));  // Imprime 8

operacion = resta;
printf("Resultado: %d\n", operacion(5, 3));  // Imprime 2

Hatsari da Kyawawan Ayyuka

Alamomi suna da ƙarfi, amma suna iya zama haɗari idan aka yi amfani da su ba daidai ba:

  1. Koyaushe fara nuni.
  2. Duba idan malloc() kuma irin wannan ayyuka sun yi nasara.
  3. Ƙwaƙwalwar ƙwaƙwalwar ajiya kyauta lokacin da ba a buƙatar ta.
  4. Yi hankali tare da masifu masu raɗaɗi (suna nuni zuwa ƙwaƙwalwar ajiya).
  5. Yana hana cikar buffer.

Misali mai amfani

Bari mu kalli misalin da ke amfani da masu nuni don aiwatar da jeri guda ɗaya mai alaƙa:

#include <stdio.h>
#include <stdlib.h>

struct Nodo {
    int dato;
    struct Nodo* siguiente;
};

void insertar_al_inicio(struct Nodo** cabeza, int nuevo_dato) {
    struct Nodo* nuevo_nodo = (struct Nodo*)malloc(sizeof(struct Nodo));
    nuevo_nodo->dato = nuevo_dato;
    nuevo_nodo->siguiente = *cabeza;
    *cabeza = nuevo_nodo;
}

void imprimir_lista(struct Nodo* nodo) {
    while (nodo != NULL) {
        printf("%d ", nodo->dato);
        nodo = nodo->siguiente;
    }
    printf("\n");
}

int main() {
    struct Nodo* cabeza = NULL;

    insertar_al_inicio(&cabeza, 3);
    insertar_al_inicio(&cabeza, 2);
    insertar_al_inicio(&cabeza, 1);

    printf("Lista: ");
    imprimir_lista(cabeza);

    // Liberar memoria
    struct Nodo* actual = cabeza;
    struct Nodo* siguiente;
    while (actual != NULL) {
        siguiente = actual->siguiente;
        free(actual);
        actual = siguiente;
    }

    return 0;
}

Wannan misalin yana nuna amfani da masu nuni don ƙirƙira da sarrafa tsarin bayanai mai ƙarfi. Alamomi suna ba ku damar ƙirƙirar nodes masu alaƙa kuma kewaya ta cikin su.

Ƙwararrun ƙira da sarrafa ƙwaƙwalwar ajiya yana da mahimmanci don yin amfani da cikakken ikon C. Ko da yake suna iya zama ƙalubale da farko, tare da aiki da kulawa, sun zama kayan aiki mai mahimmanci a cikin shirye-shiryen arsenal.

Tsarin bayanai a cikin C

da tsarin bayanai Suna da mahimmanci a cikin shirye-shirye, saboda suna ba da damar tsara bayanai da sarrafa su yadda ya kamata. C yana ba da hanyoyi da yawa don ƙirƙirar tsarin bayanai, daga mafi sauƙi zuwa mafi rikitarwa.

iri-iri

Tsarukan tsari sune mafi mahimmancin tsarin bayanai a cikin C. Suna ba da damar adana abubuwa da yawa na nau'in iri ɗaya a cikin wuraren ƙwaƙƙwara.

int numeros[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
    printf("%d ", numeros[i]);
}

Tsarin (tsari)

Tsarin yana ba ku damar haɗa nau'ikan bayanai daban-daban a ƙarƙashin suna guda ɗaya.

struct Persona {
    char nombre[50];
    int edad;
    float altura;
};

struct Persona p1 = {"Juan", 25, 1.75};
printf("Nombre: %s, Edad: %d, Altura: %.2f\n", p1.nombre, p1.edad, p1.altura);

Ƙungiyoyi (Ƙungiyoyi)

Ƙungiyoyi suna kama da tsari, amma duk membobinsu suna raba wurin ƙwaƙwalwar ajiya iri ɗaya.

union Dato {
    int i;
    float f;
    char str[20];
};

union Dato d;
d.i = 10;
printf("d.i: %d\n", d.i);
strcpy(d.str, "Hola");
printf("d.str: %s\n", d.str);

Ƙididdigar ƙididdiga (enum)

Lissafi suna ba ku damar ayyana nau'in bayanai tare da ƙayyadaddun saiti na dindindin.

enum DiaSemana {LUNES, MARTES, MIERCOLES, JUEVES, VIERNES, SABADO, DOMINGO};
enum DiaSemana hoy = MIERCOLES;
printf("Hoy es el día %d de la semana\n", hoy + 1);

Tsarukan Bayanai Mai Tsayi

C yana ba ku damar ƙirƙirar tsarin bayanai masu ƙarfi ta amfani da maƙasudi da rarraba ƙwaƙwalwar ajiya mai ƙarfi.

Jerin da aka Haɗe

struct Nodo {
    int dato;
    struct Nodo* siguiente;
};

struct Nodo* crearNodo(int dato) {
    struct Nodo* nuevoNodo = (struct Nodo*)malloc(sizeof(struct Nodo));
    nuevoNodo->dato = dato;
    nuevoNodo->siguiente = NULL;
    return nuevoNodo;
}

Tari

#define MAX 100
struct Pila {
    int items[MAX];
    int top;
};

void inicializarPila(struct Pila* p) {
    p->top = -1;
}

void push(struct Pila* p, int x) {
    if (p->top < MAX - 1) {
        p->items[++(p->top)] = x;
    }
}

int pop(struct Pila* p) {
    if (p->top >= 0) {
        return p->items[(p->top)--];
    }
    return -1;
}

layi

struct Nodo {
    int dato;
    struct Nodo* siguiente;
};

struct Cola {
    struct Nodo *frente, *atras;
};

void inicializarCola(struct Cola* q) {
    q->frente = q->atras = NULL;
}

void encolar(struct Cola* q, int x) {
    struct Nodo* temp = crearNodo(x);
    if (q->atras == NULL) {
        q->frente = q->atras = temp;
        return;
    }
    q->atras->siguiente = temp;
    q->atras = temp;
}

int desencolar(struct Cola* q) {
    if (q->frente == NULL)
        return -1;
    int dato = q->frente->dato;
    struct Nodo* temp = q->frente;
    q->frente = q->frente->siguiente;
    if (q->frente == NULL)
        q->atras = NULL;
    free(temp);
    return dato;
}

Misalin Aiki: Bishiyar Biary

Bari mu kalli wani misali mai rikitarwa na tsarin bayanai: a binary search itace.

#include <stdlib.h>

struct Nodo {
    int dato;
    struct Nodo *izquierda, *derecha;
};

struct Nodo* crearNodo(int dato) {
    struct Nodo* nuevoNodo = (struct Nodo*)malloc(sizeof(struct Nodo));
    nuevoNodo->dato = dato;
    nuevoNodo->izquierda = nuevoNodo->derecha = NULL;
    return nuevoNodo;
}

struct Nodo* insertar(struct Nodo* raiz, int dato) {
    if (raiz == NULL) return crearNodo(dato);

    if (dato < raiz->dato)
        raiz->izquierda = insertar(raiz->izquierda, dato);
    else if (dato > raiz->dato)
        raiz->derecha = insertar(raiz->derecha, dato);

    return raiz;
}

void inorden(struct Nodo* raiz) {
    if (raiz != NULL) {
        inorden(raiz->izquierda);
        printf("%d ", raiz->dato);
        inorden(raiz->derecha);
    }
}

int main() {
    struct Nodo* raiz = NULL;
    raiz = insertar(raiz, 50);
    insertar(raiz, 30);
    insertar(raiz, 20);
    insertar(raiz, 40);
    insertar(raiz, 70);
    insertar(raiz, 60);
    insertar(raiz, 80);

    printf("Recorrido inorden del árbol: ");
    inorden(raiz);
    printf("\n");

    return 0;
}

Wannan misalin yana nuna aiwatar da bishiyar bincike na binary, ingantaccen tsarin bayanai wanda ke amfani da masifu da ƙayyadaddun ƙwaƙwalwar ajiya mai ƙarfi.

  Menene microservices? Jagora mai mahimmanci

da Tsarin bayanai suna da mahimmanci don tsarawa da sarrafa bayanai cikin inganci a cikin C. Daga sassauƙan tsararru zuwa rikitattun sifofi kamar bishiyoyi, sarrafa waɗannan tsarin zai ba ku damar magance matsalolin shirye-shirye yadda ya kamata.

Shigarwa/Fitarwa da Gudanar da Fayil

Input/fitarwa (I/O) da sarrafa fayil sune mahimman abubuwan shirye-shiryen C, suna barin shirye-shirye suyi hulɗa tare da mai amfani da adanawa ko dawo da bayanai akai-akai.

Daidaitaccen Input/Fitarwa

C yana ba da ayyuka a cikin ɗakin karatu <stdio.h> don daidaitaccen shigarwa/fitarwa:

Fita

  • printf(): Don buga rubutun da aka tsara zuwa na'ura wasan bidiyo.
  • puts(): Don buga kirtani da sabon layi ya biyo baya.
  • putchar(): Don buga harafi ɗaya.
printf("Hola, %s!\n", "mundo");
puts("Esto es una línea");
putchar('A');

Entrada

  • scanf(): Don karanta shigarwar da aka tsara daga madannai.
  • gets() (marasa aiki) kuma fgets(): Don karanta layin rubutu.
  • getchar(): Don karanta harafi ɗaya.
int numero;
char nombre[50];

printf("Ingrese un número: ");
scanf("%d", &numero);

printf("Ingrese su nombre: ");
fgets(nombre, sizeof(nombre), stdin);

Fayil din fayil

C yana ba da damar aiki tare da fayiloli don ci gaba da adana bayanai:

Buɗe kuma Rufe Fayiloli

FILE *archivo;
archivo = fopen("ejemplo.txt", "w");  // Abrir para escritura
if (archivo == NULL) {
    printf("Error al abrir el archivo\n");
    return 1;
}
// Usar el archivo...
fclose(archivo);  // Cerrar el archivo

Rubuce-rubuce a cikin Taskoki

  • fprintf(): Yana rubuta rubutun da aka tsara zuwa fayil.
  • fputs(): Rubuta kirtani zuwa fayil.
  • fputc(): Rubuta harafi zuwa fayil.
fprintf(archivo, "Número: %d\n", 42);
fputs("Hola, archivo!\n", archivo);
fputc('X', archivo);

Fayilolin Karatu

  • fscanf(): Yana karanta bayanan da aka tsara daga fayil.
  • fgets(): Karanta layi daga fayil.
  • fgetc(): Karanta wani hali daga fayil.
int num;
char linea[100];

fscanf(archivo, "%d", &num);
fgets(linea, sizeof(linea), archivo);
char c = fgetc(archivo);

Misali Mai Aiki: Ajenda Mai Sauƙi

Bari mu kalli misalin da ya haɗa shigarwa/fitarwa da sarrafa fayil Don ƙirƙirar ajanda mai sauƙi:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_NOMBRE 50
#define MAX_TELEFONO 15

struct Contacto {
    char nombre[MAX_NOMBRE];
    char telefono[MAX_TELEFONO];
};

void agregarContacto(FILE *archivo) {
    struct Contacto nuevo;
    printf("Nombre: ");
    fgets(nuevo.nombre, MAX_NOMBRE, stdin);
    nuevo.nombre[strcspn(nuevo.nombre, "\n")] = 0;
    printf("Teléfono: ");
    fgets(nuevo.telefono, MAX_TELEFONO, stdin);
    nuevo.telefono[strcspn(nuevo.telefono, "\n")] = 0;

    fwrite(&nuevo, sizeof(struct Contacto), 1, archivo);
    printf("Contacto agregado.\n");
}

void mostrarContactos(FILE *archivo) {
    struct Contacto c;
    rewind(archivo);
    while(fread(&c, sizeof(struct Contacto), 1, archivo) == 1) {
        printf("Nombre: %s, Teléfono: %s\n", c.nombre, c.telefono);
    }
}

int main() {
    FILE *archivo;
    int opcion;

    archivo = fopen("agenda.dat", "ab+");
    if (archivo == NULL) {
        printf("Error al abrir el archivo.\n");
        return 1;
    }

    do {
        printf("\n1. Agregar contacto\n");
        printf("2. Mostrar contactos\n");
        printf("3. Salir\n");
        printf("Elija una opción: ");
        scanf("%d", &opcion);
        getchar(); // Limpiar el buffer

        switch(opcion) {
            case 1:
                agregarContacto(archivo);
                break;
            case 2:
                mostrarContactos(archivo);
                break;
            case 3:
                printf("Saliendo...\n");
                break;
            default:
                printf("Opción no válida.\n");
        }
    } while(opcion != 3);

    fclose(archivo);
    return 0;
}

Wannan misalin yana nuna yadda ake amfani da daidaitaccen shigarwa/fitarwa don yin hulɗa tare da mai amfani da yadda ake sarrafa fayiloli don adana bayanai dagewa. Littafin adireshi yana ba ka damar ƙara lambobin sadarwa da nuna lambobin da ke akwai, duk an adana su a cikin fayil na binary.

Ingantacciyar shigarwa/fitarwa da sarrafa fayil yana da mahimmanci don ƙirƙirar shirye-shiryen C waɗanda ke yin hulɗa yadda ya kamata tare da mai amfani da kuma sarrafa bayanai akai-akai. Waɗannan ƙwarewa suna da mahimmanci don haɓaka ƙaƙƙarfan aikace-aikace masu amfani a cikin C.

Kyawawan Ayyuka da Ka'idojin Coding

Karɓar ayyuka masu kyau da bin ƙa'idodin ƙididdigewa yana da mahimmanci don rubuta tsafta, mai kiyayewa, da ingantaccen lambar C. Wadannan ayyuka ba kawai inganta lambar karantawa ba, har ma suna taimakawa wajen hana kurakurai da sauƙaƙe haɗin gwiwa akan ayyukan ƙungiya.

Sunaye da Salo

  1. Siffofin SunayeYi amfani da sunaye masu ma'ana don masu canji, ayyuka, da sifofi.
    int edad_usuario;  // Bien
    int x;  // Evitar, poco descriptivo
    
  2. Yarjejeniyar Suna:
    • Don masu canji da ayyuka: snake_case
    • Don masu daidaitawa: MAYUSCULAS_CON_GUIONES_BAJOS
    • Don takamaiman nau'ikan (typedef): PascalCase
  3. Daidaitaccen ShigaYi amfani da sarari ko shafuka akai-akai (yawanci wurare 4).
  4. Iyakar Tsawon Layi: Ajiye layukan lambar ƙasa da haruffa 80-100 don haɓaka iya karantawa.

Ƙungiya na Code

  1. Manufar Aiki:Kowane aiki dole ne ya yi takamaiman aiki da ƙayyadaddun ayyuka.
  2. Yanci: Rarraba lambar zuwa ƙirar ma'ana da fayiloli daban.
  3. Sharhi masu Taimako: Tattauna dalilin, ba menene ba. Ya kamata lambar ta zama ta bayyana kanta.
    // Calcula el promedio de los elementos del array
    float calcular_promedio(int *arr, int size) {
      // ...
    }
    
  4. Amfani da Constant: Yana bayyana ma'anar ma'auni don ƙimar sihiri.
    #define MAX_BUFFER_SIZE 1024
    char buffer[MAX_BUFFER_SIZE];
    

Ƙwaƙwalwar ajiya da Gudanar da Albarkatu

  1. Ƙaddamar da Maɓalli: Koyaushe fara masu canji kafin amfani da su.
  2. Sakin ƙwaƙwalwar ajiya: Kyauta duk ƙayyadaddun ƙwaƙwalwar ajiya mai ƙarfi.
    int *ptr = malloc(sizeof(int) * 10);
    // Usar ptr...
    free(ptr);
    ptr = NULL;  // Evita punteros colgantes
    
  3. Kuskuren Dubawa: Koyaushe tabbatar da nasarar ayyuka masu mahimmanci.
    FILE *file = fopen("archivo.txt", "r");
    if (file == NULL) {
      // Manejar el error
    }
    

Tsaro da Karfi

  1. Tabbatar da shigarwar: Koyaushe inganta shigarwar mai amfani da sigogin ayyuka.
  2. Amfani da Type Constant: Yana amfani const ga masu canji waɗanda bai kamata a gyara su ba.
    void imprimir_array(const int *arr, int size) {
      // ...
    }
    
  3. Gujewa Magudanar Ruwa: Yi amfani da amintattun fasali ko bincika iyakoki.
    char buffer[50];
    snprintf(buffer, sizeof(buffer), "%s", input);  // Seguro
    

Ingantawa da Ayyuka

  1. Ba da fifiko ga Tsara: Rubuta lamba mai tsabta da farko, inganta kawai idan ya cancanta, da bayanin martaba daga baya.
  2. Ingantaccen Amfani da Tsarin Gudanarwa: Zaɓi tsarin sarrafawa mafi dacewa don kowane ɗawainiya.
  3. Guji Kwafin Code: Yi amfani da ayyuka don ɗaukar dabaru masu maimaitawa.

Misalin Koda Bin Kyawawan Ayyuka

Bari mu kalli misali da ya ƙunshi da yawa daga cikin waɗannan kyawawan ayyuka:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_NAME_LENGTH 50
#define MAX_STUDENTS 100

typedef struct {
    char name[MAX_NAME_LENGTH];
    int age;
    float gpa;
} Student;

void initialize_student(Student *student, const char *name, int age, float gpa) {
    strncpy(student->name, name, MAX_NAME_LENGTH - 1);
    student->name[MAX_NAME_LENGTH - 1] = '\0';
    student->age = age;
    student->gpa = gpa;
}

void print_student(const Student *student) {
    printf("Name: %s, Age: %d, GPA: %.2f\n", student->name, student->age, student->gpa);
}

float calculate_average_gpa(const Student *students, int count) {
    if (count <= 0) return 0.0f;

    float total_gpa = 0.0f;
    for (int i = 0; i < count; i++) {
        total_gpa += students[i].gpa;
    }
    return total_gpa / count;
}

int main() {
    Student students[MAX_STUDENTS];
    int student_count = 0;

    // Adding students
    initialize_student(&students[student_count++], "Alice Smith", 20, 3.8);
    initialize_student(&students[student_count++], "Bob Johnson", 22, 3.5);
    initialize_student(&students[student_count++], "Charlie Brown", 21, 3.9);

    // Printing students
    for (int i = 0; i < student_count; i++) {
        print_student(&students[i]);
    }

    // Calculating and printing average GPA
    float avg_gpa = calculate_average_gpa(students, student_count);
    printf("Average GPA: %.2f\n", avg_gpa);

    return 0;
}

Wannan misali yana nuna wasu ayyuka masu kyau:

  • Amfani da ƙayyadaddun ma'auni (#define)
  • Sunayen siffantawa don masu canji da ayyuka
  • Amfani da typedef don ƙirƙirar nau'in bayanan al'ada
  • Ayyuka tare da manufa guda ɗaya, ingantaccen ma'anar
  • Amfani da const don sigogi waɗanda bai kamata a canza su ba
  • Gudanar da igiyoyi lafiya (amfani strncpy da iyaka)
  • Taimako da taƙaitaccen sharhi
  • Duban yanayin kuskure (in calculate_average_gpa)

Bin waɗannan mafi kyawun ayyuka da ƙa'idodin ƙididdigewa zai taimake ka ka rubuta mafi tsabta, mafi aminci, da ƙarin kiyaye lambar C. Yayin da kuke samun ƙwarewa, waɗannan ayyukan za su zama yanayi na biyu kuma za su inganta ingantaccen lambar ku.

Kayayyakin gyara kurakurai da haɓakawa

Gyara kuskure wani muhimmin bangare ne na tsarin haɓaka software na C da sanin kayan aikin da ake da su na iya ceton ku lokaci mai yawa da takaici lokacin magance lambar ku.

Dabarun Gyaran Mahimmanci

  1. Buga gyara kuskure: Hanya mafi sauƙi ita ce ƙara maganganu printf don gano kwararar shirin da madaidaitan ƙima.
    printf("Debug: x = %d, y = %d\n", x, y);
    
  2. Tabbatarwa: Yi amfani da macro assert don duba yanayin da dole ne gaskiya.
    #include <assert.h>
    
    assert(ptr != NULL);  // El programa se detendrá si ptr es NULL
    
  3. Haɗa tare da Tutocin Debug: Yi amfani da tutoci -g y -Wall lokacin da ake haɗawa tare da GCC don haɗa bayanan gyara kuskure da ba da damar duk faɗakarwa.
    gcc -g -Wall programa.c -o programa

Kayan aikin gyara gyara kurakurai

  1. GDB (GNU Debugger): Kayan aiki mai ƙarfi na layin umarni don lalata shirye-shiryen C.
    gdb ./programa
    (gdb) break main
    (gdb) run
    (gdb) next
    (gdb) print variable
    (gdb) continue
    (gdb) quit
    
  1. valgrind: Yana da kyau don gano ɓarna ƙwaƙwalwar ajiya da sauran kurakurai masu alaƙa da ƙwaƙwalwar ajiya.
    valgrind --leak-check=full ./programa
  2. IDE tare da Haɗin DebuggerIDEs kamar Visual Studio Code, CLion, ko Eclipse CDT suna ba da musaya na hoto don gyara kuskure wanda zai iya zama da hankali ga wasu masu haɓakawa.

Babban Dabarun Gyaran Gyara

  1. Gyara Nesa: Mai amfani ga tsarin da aka haɗa ko lokacin da shirin ke gudana akan na'ura daban.
  2. Gyara Dumps Core: Yi nazarin jujjuyawar ƙwaƙwalwar ajiya bayan wani shiri ya fado.
   
gdb ./programa core
  1. Gyara Shirye-shiryen Maɗaukaki Mai RubutuYi amfani da kayan aiki kamar Helgrind (bangaren Valgrind) don gano matsalolin haɗin gwiwa.
    valgrind --tool=helgrind ./programa_multihilo
    

Kayan Aikin Nazari A tsaye

  1. Cppcheck: Yana nazarin lambar ba tare da aiwatar da shi ba don nemo kurakurai da munanan ayyuka.
    cppcheck --enable=all programa.c
    
  2. Lint ko splint: Kayan aikin da ke taimakawa gano kurakuran shirye-shirye da salo.

Ingantawa da Bayanan Bayani

  1. gprof: Kayan aiki na bayanin martaba wanda ke taimakawa gano ƙwanƙolin aiki.
   
   gcc -pg programa.c -o programa
   ./programa
   gprof programa gmon.out > analisis.txt
   
  1. cikakke: Kayan aikin bincike na aiki akan tsarin Linux.
   
perf record ./programa
   perf report

Misalin Aiki: Gyara Sauƙaƙe Shirin

Bari mu kalli misalin yadda za mu iya gyara wani sauƙi shirin tare da kuskure:

#include <stdio.h>
#include <stdlib.h>

void procesar_array(int *arr, int size) {
 for (int i = 0; i <= size; i++) {  // Error: debería ser i < size
     arr[i] *= 2;
 }
}

int main() {
 int *numeros = malloc(5 * sizeof(int));
 for (int i = 0; i < 5; i++) {
     numeros[i] = i + 1;
 }

 procesar_array(numeros, 5);

 for (int i = 0; i < 5; i++) {
     printf("%d ", numeros[i]);
 }
 printf("\n");

 free(numeros);
 return 0;
}

Wannan shirin yana da dabarar kwaro a cikin aikin procesar_array: Madauki yana ƙara sau ɗaya fiye da buƙata, yana haifar da ambaliya.

Matakan gyara kuskure:

  1. Haɗa tare da tutocin gyara kuskure:
    gcc -g -Wall programa.c -o programa
    
  2. Yi gudu tare da Valgrind:
    valgrind ./programa
    

    Wataƙila Valgrind zai ba da rahoton samun damar ƙwaƙwalwar ajiya mara inganci.

  3. Amfani da GDB don ƙarin bincike:
    gdb ./programa
    (gdb) break procesar_array
    (gdb) run
    (gdb) next
    (gdb) print i
    (gdb) print size
    
  4. Da zarar an gano kuskuren, gyara shi ta canza i <= size a i < size en procesar_array.
  5. Sake tattarawa da sake gwadawa don tabbatar da an warware matsalar.

Tukwici Na Ƙarshe don Ƙwarewar Ƙwarewar Ƙarfi

  1. Maimaita Kuskuren: Tabbatar cewa za ku iya sake haifar da kwaro akai-akai kafin ku fara gyara matsala.
  2. Raba Ku Ci: Idan matsalar tana da rikitarwa, gwada ware ta zuwa ƙaramin lambar.
  3. Duba Canje-canjen Kwanan nan: Ana yawan gabatar da kwari a cikin gyare-gyare na baya-bayan nan.
  4. Karka dauka Komai: Duba ko da sassan lambar da kuke tunanin suna aiki daidai.
  5. Yi amfani da Sarrafa SigarKayan aiki kamar Git suna ba ku damar sauya canje-canje cikin sauƙi idan kun gabatar da sabbin al'amura yayin da ake gyarawa.
  6. Ajiye Rikodi: Rubuta matakan da kuke ɗauka yayin cirewa, musamman don matsaloli masu rikitarwa.
  7. Koyi daga kuskure: Kowane kwaro wata dama ce don inganta ku dabarun shirye-shirye da kuma hana irin wannan kuskure a nan gaba.

Debugging duka fasaha ne da kimiyya. Tare da aiki da kuma amfani da kayan aikin da ya dace, za ku fi dacewa wajen ganowa da warware matsaloli a cikin lambar C ɗin ku.

Aikace-aikace da Makomar Harshen C

Duk da shekarunsa, yaren C ya kasance babban ƙarfi a duniyar shirye-shirye. Ingancin sa, ɗaukar nauyi, da ƙananan iko yana kiyaye shi dacewa a fagage daban-daban. Bari mu kalli wasu aikace-aikacen C na yanzu kuma muyi hasashen makomarta.

Aikace-aikace na yanzu na C

  1. Tsarin aiki: C ya kasance harshen zaɓi don haɓaka tsarin aiki. Linux, macOS, da Windows suna da babban yanki na lambar su da aka rubuta a cikin C.
  2. Tsare-tsare masu ciki:Saboda ingancinsa da ƙarancin kulawa, C ana amfani dashi sosai a cikin tsarin da aka haɗa, daga kayan aikin gida zuwa motocin masu cin gashin kansu.
  3. Ci gaban wasannin bidiyo: Yawancin injunan wasa da kayan aikin haɓaka ana rubuta su cikin C ko C++.
  4. Databases: Ana aiwatar da tsarin sarrafa bayanai kamar MySQL da PostgreSQL a cikin C.
  5. Masu tarawa da Kayayyakin Ci gaba: Yawancin masu tarawa, masu fassara da kayan aikin haɓakawa an rubuta su a cikin C.
  6. Manyan Ayyuka: Ana amfani da C a cikin aikace-aikacen da ke buƙatar aiki mafi kyau, kamar simintin kimiyya da manyan sarrafa bayanai.
  7. Tsaro da Rubutu: Yawancin ɗakunan karatu na tsaro da kayan aiki ana aiwatar da su a cikin C saboda ingancinsa da ƙarancin kulawa.

Makomar C

  1. Ci gaba da dacewa: Duk da fitowar sababbin harsuna, C zai ci gaba da kasancewa masu dacewa saboda ingancinsa da kuma yawan adadin da ke akwai.
  2. Juyin Halitta: Kwamitin daidaitawa na C yana ci gaba da yin aiki akan sabbin nau'ikan harshe, yana ƙara fasalulluka na zamani yayin da ake ci gaba da dacewa da baya.
  3. Haɗin kai tare da Sabbin Fasaha: C yana daidaitawa don yin aiki mafi kyau tare da fasaha masu tasowa irin su ƙididdigar adadi da hankali na wucin gadi.
  4. Inganta TsaroGanin mahimmancin tsaro a cikin software na zamani, muna iya ganin ƙarin fasali da kayan aikin da aka mayar da hankali kan rubuta ƙarin amintaccen lambar C.
  5. Haɓaka Ƙarƙashin Tsarin Amfani: Tare da haɓakar na'urorin IoT da ƙididdigar ƙididdiga, C zai ci gaba da kasancewa mai mahimmanci don haɓaka tsarin ingantaccen makamashi.
  6. Interaperability: C zai ci gaba da zama "harshen manna", yana ba da damar haɗin kai tsakanin harsuna da tsarin daban-daban.

Kalubale da Dama

  1. Ƙwarewa a cikin Wasu Harsuna: Harsuna kamar Tsatsa suna samun ƙasa a yankunan da al'adar C ke mamayewa, musamman ma idan ya zo ga amincin ƙwaƙwalwar ajiya.
  2. Haɓaka Haɗin Tsari: Yayin da tsarin ya zama mafi rikitarwa, C zai buƙaci haɓaka don sarrafa wannan rikitarwa ba tare da rasa halayen halayensa ba.
  3. Ilimi da Horarwa: Tsayar da tushe mai tushe na masu shirye-shiryen C zai zama mahimmanci don kiyayewa da haɓaka tsarin mahimmanci.
  4. Daidaita Zamanta da Daidaituwa: Babban kalubalen da ke ci gaba zai kasance don ƙara fasalin zamani zuwa C ba tare da ɓata sauƙi da dacewa da baya ba.

Misali: C a Ci gaban IoT

Bari mu kalli misali mai sauƙi na yadda za a iya amfani da C a cikin na'urar IoT don karanta firikwensin zafin jiki da aika bayanan:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/i2c-dev.h>

#define I2C_ADDR 0x48  // Dirección I2C del sensor de temperatura

float leer_temperatura(int file) {
    char reg[1] = {0x00};
    char data[2] = {0};

    if (write(file, reg, 1) != 1) {
        perror("Error de escritura en I2C");
        exit(1);
    }

    if (read(file, data, 2) != 2) {
        perror("Error de lectura en I2C");
        exit(1);
    }

    int raw = (data[0] << 8) | data[1];
    float temp = raw / 256.0;
    return temp;
}

int main() {
    int file;
    char *filename = "/dev/i2c-1";

    if ((file = open(filename, O_RDWR)) < 0) {
        perror("Error al abrir el bus I2C");
        exit(1);
    }

    if (ioctl(file, I2C_SLAVE, I2C_ADDR) < 0) {
        perror("Error al acceder al sensor");
        exit(1);
    }

    while (1) {
        float temp = leer_temperatura(file);
        printf("Temperatura: %.2f°C\n", temp);
        sleep(1);  // Esperar 1 segundo antes de la siguiente lectura
    }

    close(file);
    return 0;
}

Wannan misalin yana nuna yadda za'a iya amfani da C don yin hulɗa kai tsaye tare da hardware a cikin na'urar IoT, ta hanyar karanta bayanai daga na'urar firikwensin zafin jiki akan bas ɗin I2C.

Ƙarshe akan gabatarwar zuwa harshen C

Harshen C, duk da shekarunsa, ya kasance babban kayan aiki a duniyar haɓaka software. Ingancinsa, ɗaukar nauyi da ƙananan iko ya sa ba za a iya maye gurbinsa ba a yawancin fagage masu mahimmanci na fasaha. Ko da yake yana fuskantar ƙalubale daga ƙarin harsunan zamani, C na ci gaba da haɓakawa da daidaitawa ga canjin buƙatun masana'antu. Gabatarwa ga yaren C yana da mahimmanci don fahimtar waɗannan fasalulluka da kuma dacewarsu a fagen.

Ga masu haɓakawa, kiyayewa da haɓaka ƙwarewar C ya kasance jari mai mahimmanci. Ƙarfin C na yin hulɗa kai tsaye tare da hardware, haɗe tare da ingancinsa, ya sa ya dace don aikace-aikace iri-iri, daga tsarin da aka haɗa zuwa software mai girma. Ana iya godiya da wannan ingancin daga farkon lokacin gabatarwa zuwa harshen C, inda aka gano iyawarsa da aikace-aikace masu amfani.

Makomar C tana da alama ta tabbata, aƙalla a cikin matsakaiciyar lokaci, godiya ga ɗimbin tushe na lambar da ke akwai, ci gaba da juyin halittar sa da muhimmiyar rawar da yake takawa wajen haɓaka tsarin mahimmanci. Kamar yadda fasaha ta ci gaba, C za ta ci gaba da daidaitawa da samun sababbin abubuwa, yana riƙe da matsayinsa a matsayin ɗaya daga cikin harsunan shirye-shirye mafi tasiri da jurewa a cikin tarihin kwamfuta.

 

Tambayoyin da ake yawan yi game da Gabatarwa zuwa Harshen C

1. Menene ya bambanta C da sauran yarukan shirye-shirye?

An bambanta C ta dacewarsa, iyawar sa, da ƙarancin iko akan kayan masarufi. Ba kamar yaruka masu girma ba, C yana ba da damar sarrafa ƙwaƙwalwar ajiya kai tsaye kuma yana ba da aiki kusa da na harshen injin, yana mai da shi manufa don haɓaka tsarin aiki, direbobin na'ura, da aikace-aikacen da ke buƙatar ingantaccen aiki.

2. Shin C shine kyakkyawan harshe ga masu farawa a cikin shirye-shirye?

Ko da yake C yana da tsarin koyo mai zurfi, yana iya zama kyakkyawan harshe ga masu farawa waɗanda ke son fahimtar tushen shirye-shirye da yadda kwamfutoci ke aiki a ƙaramin matakin. Koyaya, yana buƙatar zurfin fahimtar ra'ayoyi kamar sarrafa ƙwaƙwalwar ajiya, wanda zai iya zama ƙalubale ga wasu masu farawa.

3. Ta yaya ake kwatanta C da C++?

C++ tsawo ne na C wanda ke ƙara fasalulluka na Shirye-shiryen abubuwa, da sauransu. Yayin da C shine yaren tsari mai tsafta, C++ yana haɗa shirye-shiryen tsari da daidaitacce zuwa abubuwa. C yana son zama mafi sauƙi kuma mafi kai tsaye, yayin da C++ yana ba da ƙarin abstractions da fasali masu girma.

4. Menene mafi yawan aikace-aikacen C a yau?

Ana amfani da C sosai wajen haɓaka tsarin aiki, tsarin da aka haɗa, direbobin na'urori, aikace-aikacen ayyuka masu ƙarfi, bayanan bayanai, da haɓaka wasu harsunan shirye-shirye da kayan haɓakawa.

5. Ta yaya C ke kula da sarrafa ƙwaƙwalwar ajiya?

C yana ba da iko da hannu akan sarrafa ƙwaƙwalwar ajiya. Masu shirye-shirye suna da alhakin rarrabawa da 'yantar da ƙwaƙwalwar ajiya ta amfani da ayyuka kamar malloc () da kyauta (). Wannan yana ba da babban sassauci da inganci, amma kuma yana iya haifar da kurakurai kamar leak ɗin ƙwaƙwalwar ajiya idan ba a kula da su daidai ba.

6. Wadanne kayan aiki ne masu mahimmanci don tsarawa a cikin C?

Muhimman kayan aiki sun haɗa da mai haɗawa C (kamar GCC), editan rubutu ko IDE (kamar Visual Studio Code ko Code :: Blocks), mai gyara (kamar GDB), da kayan aikin bincike irin su Valgrind don gano ɓarnawar ƙwaƙwalwar ajiya da sauran matsaloli.

Abinda ke ciki