Skillnaden mellan int main() och int main(void)
Både int main() och int main(void) kan se likadana ut vid första anblicken, men det finns en betydande skillnad mellan de två i C, men båda är likadana i C++.
I C kan en funktion utan parameter ta emot ett valfritt antal argument. Till exempel kan en funktion deklarerad som ”foo()” ta ett valfritt antal argument i C (att kalla foo(), foo(1), foo(’A’,1) ger inget fel).
#include <stdio.h>void foo(){}int main(){ foo(); foo(1); foo(1,'A'); foo(1,'A',"ABC"); printf("ABC\n"); return 0;}
Ovanstående kod körs bra utan att ge något fel eftersom en funktion utan parameter kan ta ett valfritt antal argument, men detta är inte fallet i C++. I C++ får vi ett fel. Låt oss se.
#include <iostream>using namespace std;void foo(){}int main(){ foo(1); cout << "ABC" << endl; return 0;}
Körningen av ovanstående kod kommer att ge oss ett fel eftersom vi inte kan lämna något argument till funktionen ”foo”.
Hursomhelst begränsar användandet av foo(void) funktionen till att ta emot något argument och kommer att ge ett fel. Låt oss se.
#include <stdio.h>void foo(void){}int main(){ foo(1); printf("ABC\n"); return 0;}
Ovanstående kod kommer att ge oss ett fel eftersom vi har använt ”foo(void)” och detta innebär att vi inte kan lämna över något argument till funktionen ”foo” som vi gjorde i fallet med ”foo()”.
Både foo(void) och foo() är alltså samma i C++ men inte i C. Samma sak gäller även för funktionen ”main”. Så den form som föredras är int main(void) om main inte tar något argument.
Skillnaden mellan int main() och void main() och main()
Som vilken annan funktion som helst är main också en funktion, men med den speciella egenskapen att programutförandet alltid startar från ’main’. ’int’ och ’void’ är dess returtyp. Så låt oss diskutera alla tre en efter en.
- void main – ANSI-standarden säger ”nej” till ”void main” och därför kan det anses vara fel att använda den. Man bör sluta använda ”void main” om man gör det.
- int main – ”int main” innebär att vår funktion måste returnera något heltal i slutet av utförandet och vi gör det genom att returnera 0 i slutet av programmet. 0 är standarden för ”framgångsrik exekvering av programmet”.
- main – I C89 är den ospecificerade returtypen som standard int. Så main motsvarar int main i C89. Men i C99 är detta inte tillåtet och därför måste man använda int main.
Så det föredragna sättet är int main.