- Funció principal del programa. És la funció que comença l'execució del programa. Dins d'ella es defineixen el cos principal del programa, les variables locals associades al cos principal, i les crides a les funcions més importants del programa. El nom main és fix, al contrari de la resta de funcions.
Exemples:
ex 1.16:
void main(void) { /* inici programa */ char c; /* declaració de variables locals principals */ int i; i=0; /* instruccions del cos principal */ do { c=llegir(); escriure(c); i++; } while ((c!='F') && (i<1000)); } /* fi del programa */
- Els comentaris es posen entre uns delimitadors especials de principi i fi de comentari: /* i */ respectivament. Aquests comentaris poden ser de vàries línies, però cal anar amb compte de tancar-los, perquè sinó poden englobar tot el text que ve al darrera, és a dir, les sentències de C que apareixen abans del següent fi de comentari.
Exemples:
ex 1.17: comentari llarg de varies línies:
/* Programa de pràctica de control de flux: s'han de comptar les lletres */
cex 1.16: comentari inacabat -> la sentència i++ no es compilarà!:
if (c!='F') /* si no s'ha arribat al final i++; /* incrementa el comptador */
- Els define són identificadors simbòlics que es substitueixen pel seu valor "textual" (no tenen tipus, només es corresponen a tires de text) en temps de compilació. Conceptualment són macros. És usual definir-los al principi del programa. La definició comença per #define, seguida del nom simbòlic (usualment es posen en majúscules per distingir-los de les variables, que es posen en minúscula), i del valor textual a substituir (el caràcter '#' és l'indicador de directiva de compilació, és a dir, define no és una sentència de C sinó una directiva per al compilador). Es fa servir per definir valors constants que es faran servir al llarg del programa;
Exemples:
ex 1.18: Es defineixen les constants FI i MAX, que seran substituïdes en la condició de mentre com si s'hagués escrit 'F' i 1000 (el compilador ho escriu per nosaltres en tots els llocs que troba els noms simbòlics -després d'haver-los definit-, i després ho compila):
#define FI 'F' /* la cadena "FI" és equivalent a la cadena "'F'" */ #define MAX 1000 /* la cadena "MAX" és equivalent a la cadena "1000" */ void main(void) { char c; int i; i=0; while(((c=llegir())!=FI) && ((i++)<=MAX)) /* substitucions... */ escriure(c); }
- La directiva include serveix per "incrustar" fitxers de text en el punt del programa on es troba l'include. Això es fa servir per importar fitxers de definicions anomenats Headers. Aquest fitxers contenen informació necessària per al compilador a l'hora de referenciar variables, tipus, constants, i funcions externes que proporcionen les llibreries i mòduls C suplementaris al mòdul (conjunt de rutines C) que s'estan implementant (que serà el mòdul principal si inclou la funció main). També es fan servir els Headers per importar defines. Per conveni, els noms dels fitxers Header tenen l'extensió ".H";
- Un exemple concret és el que s'ha anat fent servir fins ara, que és l'include del fitxer "STDIO.H". Aquest Header aporta definicions necessàries per a l'ús de certes rutines i defines, com ara printf(), getchar() o EOF. Dins del directori del TurboC es troba un subdirectori anomenat INCLUDE, que conté l'STDIO.H i més fitxers de tipus Header, que fan referència al sistema de funcions estàndard de C, que es subministra amb les llibreries estàndard. Aquestes llibreries es troben al directori LIB, i el linkador les enllaça automàticament al programa en C quan s'executa la comanda TCC. Es pot editar el fitxer STDIO.H o qualsevol altre Header, on es trobaran les definicions de funcions i defines estàndard.
- Les funcions estàndard estan disponibles en tots els entorns on es pugui programar en C. Per tant, es poden transportar els programes que únicament fan servir aquestes llibreries entre diferents plataformes (es transporten els fonts, és a dir, els fitxers .C, i es recompilen).
Exemples:
ex 1.19: Importar les definicions pel define EOF i la funció printf(), del Header STDIO.H. Si el nom del fitxer Header està entre els signes '<' i '>', el compilador buscarà el fitxer al directori INCLUDE:
#include <stdio.h> void main(void) { int i; i=EOF; printf("Hello, world number %d!\n",i); }
ex 1.20: Importar un fitxer Header que està en algun altre lloc del disc. Cal posar el nom i el camí del fitxer entre cometes:
#include "C:\TC\EXEMPLES\MYINC.H"
- La funció estàndard printf serveix per imprimir dades de qualsevol tipus elemental (caràcters, enters, reals, strings, ...) en varis formats (decimal, octal, hexadecimal, punt fix, punt flotant, ...). El mètode consisteix en passar com a paràmetres una cadena de format més les variables involucrades. Aquesta cadena de format conté caràcters i codis especials per indicar la posició i format de les variables que s'imprimiran. Per exemple, l'expressió:
printf("el caràcter %c apareix %d vegades en el text\n",c,nc);
indica que per pantalla ha de sortir la frase esmentada, però substituint (en el lloc on apareixen) els codis %c i %d pel valor de les dues variables c i nc (les variables s'assignen als codis per ordre d'aparició). En aquest cas, %c indica que c s'ha de visualitzar com a caràcter, i %d indica que nc ho ha de fer com a decimal (una variable o expressió d'un tipus es pot visualitzar en un format d'un altre tipus, per exemple, un enter es pot visualitzar com a caràcter, ...). Alguns dels codis disponibles són:
%c -> caràcter %d -> decimal %f -> real punt fix %s -> string %o -> octal %e -> real punt flotant %x -> hexadecimal
- Dins de la cadena de format, com de qualsevol string que s'utilitzi en l'entorn del C, apareixen uns codis de caràcters especials, que són necessaris per especificar caràcters que no es poden escriure tal qual perquè interfereixen amb l'edició del programa. Per exemple el <Return> (si es vol introduir un codi <Return> dins d'una cadena, no es pot fer prement la tecla <Return>, ja que passaria a l'edició de la línia següent). També quan hi ha una ambigüitat amb la pròpia definició de la cadena: per exemple, el caràcter cometes (si es vol introduir unes cometes en la cadena, s'ha de distingir-les de les cometes per tancar la cadena). Aquests codis estan formats per un caràcter '\' seguit d'un identificador del codi a introduir. Alguns d'aquests codis són:
\n -> nova línia (Return) \\ -> barra invertida \t -> tabulador \" -> cometes \b -> retrocés \' -> apòstrof \r -> principi línia \% -> tant per cent \0 -> codi nul (ASCII 0) \xhh -> caràcter ASCII número hh (hexa)
- En el cas de la funció scanf(), la cadena de format només pot contenir codis de format (%d, %s, ...), i les variables han d'anar precedides del signe '&', per passar-les per referència (això s'explicarà més endavant).
Exemples:
ex 1.21: En aquest exemple la variable de tipus caràcter lletra és preguntada amb scanf i impresa amb printf dues vegades: una en forma de caràcter, amb %c i l'altra en forma d'enter, amb %d (codi ASCII del caràcter):
#include <stdio.h> void main(void) { char lletra; printf("\nintrodueix una lletra :"); scanf("%c",&lletra); printf("el codi \\ASCII\\ de la lletra \"%c\"\tés %d\n", lletra,lletra); }