[WikiItic] [TitleIndex] [WordIndex

FAQ sobre C

Com es compila i munta quan tens diversos moduls?

La resposta curta i directa és, si tens els mòduls següents:

cal compilar amb l'ordre de terminal següent:

   1 $ gcc -std=c99 mod1.c mod2.c princ.c -o princ

Mireu l'exemple de ../ExemplesUnitTest si voleu veure-ho en un programa concret.

Per què a l'accedir al camp d'una tupla a través d'un apuntador dóna error?

Si tenim un codi com aquest:

   1 typedef struct {
   2   int valor, freq;
   3 } tupla;
   4 
   5 int main() {
   6   tupla seq[20];
   7   tupla *p, *t;
   8   
   9   t = &seq[0]; /*o també t=seq;*/
  10   
  11   while (*t.valor != 0) { ;}
  12 }

A l'accedir al camp valor usant la expressió *t.valor es produeix un error sintàctic que diu:

p.c: In function ‘main’:
p.c:11: error: request for member ‘valor’ in something not a structure or union

La raó s'ha de trobar en la prioritat dels operadors. Com veieu, . és més prioritari que *. Per tant l'expressió d'accés s'interpreta com *(t.valor), que no és el que es volia.

La forma correcta d'escriure-ho és (*t).valor. Si els parèntesis fan nosa estèticament, podeu escriure-ho també com t->valor, que queda més mono ;) .


CategoryApunts


2023-07-03 11:46