2010-10-05 4 views
1
#include<stdio.h> 
int add(int,int); 
int main() 
{ 
    int p=add(10,20); 
    printf("%d",p); 
    return 0; 
} 

int add(int x, int y) 
{ 
    int sum=x+y; 
} 

O/P: 30 

#include<stdio.h> 
int add(int,int); 
int main() 
{ 
    int p=add(10,20); 
    printf("%d",p); 
    return 0; 
} 
int add(int x, int y) 
{ 
    int sum=x+y; 
    printf("Hello"); 
} 

O/P: 5 

#include<stdio.h> 
int add(int,int); 
int main() 
{ 
    int p=add(10,20); 
    printf("%d",p); 
    return 0; 
} 
int add(int x, int y) 
{ 
    int sum=x+y; 
    sum++; 
} 

O/P: 30 
+4

Est-ce votre travail? Ou avez-vous dû écrire des programmes et vous vous demandez ce que vous avez fait de mal? –

+0

Je crains que vous n'ayez à modifier votre question en profondeur. Vous devez nous dire ce que vous avez fait vous-même pour comprendre cela, et quelles sont vos pensées. Puis résumer et mettre en question le formulaire. Dire "Pourquoi la sortie est-ce comme cela", puis vider un programme, et le texte "30", ne nous donne rien à continuer. Cherchez-vous de l'aide pour comprendre les programmes? Y a-t-il des bugs là-dedans? Avez-vous besoin d'aide pour les compiler? Vous devriez vérifier cette page: http://stackoverflow.com/questions/how-to-ask –

+0

Essayer toutes sortes de choses est très amusant. Prendre plaisir; mais rappelez-vous de ne pas apprendre du résultat de vos expériences. Les résultats que vous voyez ne sont pas garantis de se reproduire la prochaine fois que vous compilez la même source avec différentes options (ou sur un autre ordinateur ...) – pmg

Répondre

9

Aucun des extraits de code compilerait parce que vous n'avez pas déclaré/défini les fonctions avant de les utiliser.

En outre, même si vous ajoutez les déclarations au-dessus de main(), le comportement des extraits ne sera toujours pas défini car vous utilisez la valeur renvoyée d'une fonction non-void sans instruction return.

+0

Yup, aucune des fonctions 'add' ne retourne quoi que ce soit. – Piskvor

+0

Vous pouvez appeler fonction sans prototype en C. Vous pouvez donc compiler sans déclarer la fonction, mais vous recevrez généralement un avertissement. Néanmoins, les fonctions manquent une déclaration de retour. – harper

5

Vous ne renvoyez pas sum dans votre fonction d'ajout.

+0

Désolé, j'ai foiré un peu et ai édité votre poste au lieu du mien par erreur. Cependant roulé votre réponse. :) –

+0

Pas de soucis, ta réponse est bien meilleure de toute façon :) – GWW

1

printf("%d",p); est l'impression de certains déchets que p pointe vers. Vous devez retourner sum de add:

return sum; 
1

Juste par chance, ou plutôt parce que vous les compilez sans optimisation. ;-)

Les résultats ne sont en fait pas définis et dépendent des options de compilation et de compilation. Dans votre configuration, la fonction add() est arrivée à laisser quelque chose sur la pile à l'endroit où main() attendait une valeur de retour. Essayez avec l'optimisation et vous verrez la différence.

Questions connexes