Deklaration, Typ och Retur
Från vår föregående lektion lärde du dig den grundläggande strukturen för funktioner:
main.c
123456func_type func_name(arguments_placeholder) { // The core functionality of the function // The resulting outcome after function execution return function_output; }
Deklaration
Innan en funktion kan användas måste den deklareras. Att anropa en funktion innan den har deklarerats leder till ett fel.
Du kan antingen deklarera hela funktionen samtidigt som dess definition (som visats ovan) eller använda en prototyp, vilket vi kommer att ta upp som en bonus i slutet av detta avsnitt.
Funktionstyper och returvärden
Funktionens typ informerar kompilatorn om datatypen för funktionens resultat. Om vår funktion till exempel beräknar summan av två heltal, förväntar vi oss ett heltal som resultat.
main.c
12345678int sumFunction() { int number1 = 6; int number2 = 10; int result = number1 + number2; return result; }
En avvikelse mellan datatypen och returtypen kan göra att funktionen (eller till och med hela programmet) fungerar felaktigt.
main.c
12345678int sumFunction() { double number1 = 6.985; double number2 = 231.465; double result = number1 + number2; return result; // This will lead to an incorrect result }
Vid summering av icke-heltal förväntas ett precist resultat. Men på grund av inkonsekvens i datatyper blir resultatet felaktigt.
main.c
1234567891011121314151617#include <stdio.h> int func() { double number1 = 6.985; // Not `int` nubmer double number2 = 231.765; // Not `int` number double result = number1 + number2; return result; // Output of function } int main() { // Call and immediately printing the result of our function printf("Expected Result is 238.75, but result is %d\n", func()); return 0; }
Två huvudsakliga faktorer bidrar till detta fel:
- Felaktig returtyp (ska vara
double); - Användning av fel format-specifier (
%d) i funktionenprintf()(ska vara%f).
Den korrekta versionen skulle vara:
main.c
1234567891011121314151617#include <stdio.h> double func() { double number1 = 6.985; // `int` nubmer double number2 = 231.765; // `int` number double result = number1 + number2; return result; // Output of function } int main() { // Print the result of our function printf("Expected Result is 238.75, and result is %f\n", func()); return 0; }
Detta innebär att vi direkt kan tilldela funktionens resultat till variabler/arrayer eller till och med skicka det till andra funktioner. Ett exempel på detta är hur vi använde resultatet med funktionen printf i ovanstående scenarier.
Format-specifikatorn för flyttal är %f.
Det är också värt att nämna att en funktion kan innehålla flera return-satser, där varje aktiveras under olika villkor.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Can you explain more about function prototypes?
What happens if I use the wrong return type in my function?
Can you give an example of a function with multiple return statements?
Awesome!
Completion rate improved to 2.63
Deklaration, Typ och Retur
Svep för att visa menyn
Från vår föregående lektion lärde du dig den grundläggande strukturen för funktioner:
main.c
123456func_type func_name(arguments_placeholder) { // The core functionality of the function // The resulting outcome after function execution return function_output; }
Deklaration
Innan en funktion kan användas måste den deklareras. Att anropa en funktion innan den har deklarerats leder till ett fel.
Du kan antingen deklarera hela funktionen samtidigt som dess definition (som visats ovan) eller använda en prototyp, vilket vi kommer att ta upp som en bonus i slutet av detta avsnitt.
Funktionstyper och returvärden
Funktionens typ informerar kompilatorn om datatypen för funktionens resultat. Om vår funktion till exempel beräknar summan av två heltal, förväntar vi oss ett heltal som resultat.
main.c
12345678int sumFunction() { int number1 = 6; int number2 = 10; int result = number1 + number2; return result; }
En avvikelse mellan datatypen och returtypen kan göra att funktionen (eller till och med hela programmet) fungerar felaktigt.
main.c
12345678int sumFunction() { double number1 = 6.985; double number2 = 231.465; double result = number1 + number2; return result; // This will lead to an incorrect result }
Vid summering av icke-heltal förväntas ett precist resultat. Men på grund av inkonsekvens i datatyper blir resultatet felaktigt.
main.c
1234567891011121314151617#include <stdio.h> int func() { double number1 = 6.985; // Not `int` nubmer double number2 = 231.765; // Not `int` number double result = number1 + number2; return result; // Output of function } int main() { // Call and immediately printing the result of our function printf("Expected Result is 238.75, but result is %d\n", func()); return 0; }
Två huvudsakliga faktorer bidrar till detta fel:
- Felaktig returtyp (ska vara
double); - Användning av fel format-specifier (
%d) i funktionenprintf()(ska vara%f).
Den korrekta versionen skulle vara:
main.c
1234567891011121314151617#include <stdio.h> double func() { double number1 = 6.985; // `int` nubmer double number2 = 231.765; // `int` number double result = number1 + number2; return result; // Output of function } int main() { // Print the result of our function printf("Expected Result is 238.75, and result is %f\n", func()); return 0; }
Detta innebär att vi direkt kan tilldela funktionens resultat till variabler/arrayer eller till och med skicka det till andra funktioner. Ett exempel på detta är hur vi använde resultatet med funktionen printf i ovanstående scenarier.
Format-specifikatorn för flyttal är %f.
Det är också värt att nämna att en funktion kan innehålla flera return-satser, där varje aktiveras under olika villkor.
Tack för dina kommentarer!