каква е стойността по подразбиране на int datatype в c?

#include <stdio.h>

void main(int x)
{

    printf("%d",x);
    
    return 0;
}

Ако отпечатаме x стойност във функция main(), тя ще покаже 0 и тъй като стойността по подразбиране на int е 0. когато добавя int x като параметър в main(), тя отпечатва x стойност е 1. Защо?


person Lingaraj sahoo    schedule 24.11.2020    source източник
comment
Това отговаря ли на въпроса ви? Какво означава int argc, char *argv[]?   -  person Uriya Harpeness    schedule 24.11.2020
comment
Никога преди не съм виждал main като това, но мисля, че ще даде 1, тъй като първият аргумент за main може да бъде argc   -  person csavvy    schedule 24.11.2020
comment
main получава два параметъра, argc и argv, вижте тук за тяхното значение: stackoverflow.com/questions/3024197/.   -  person Uriya Harpeness    schedule 24.11.2020
comment
тъй като стойността по подразбиране на int е 0 Защо мислите така? Няма стойност по подразбиране. Достъпът до неинициализирана променлива е недефинирано поведение.   -  person William Pursell    schedule 24.11.2020
comment
@WilliamPursell Освен ако не е статичен   -  person klutt    schedule 24.11.2020


Отговори (2)


Afaik в хоствана среда единствените валидни основни прототипи са:

void main(void);
void main(int argc, char* argv[]);

Всичко друго (включително вашия пример) е недефинирано поведение.

При локален обхват променливата се унитиализира. Четенето от него води до недефинирано поведение.

В глобален обхват променлива int по подразбиране се инициализира на 0.

person bolov    schedule 24.11.2020

тъй като стойността по подразбиране на int е 0

Не, не е. Това обаче е нещо като стойност по подразбиране за всички статични променливи, като глобалните променливи, но независимо от техния тип. Променливите с автоматично съхранение имат неопределени стойности и четенето им преди да бъдат инициализирани причинява недефинирано поведение.

когато добавя int x като параметър в main(), той отпечатва стойността на x е 1. Защо?

Е, int main(int) не е валиден подпис. Двете разрешени са int main(void) и int main(int, char**). И когато изберете втория, тогава първият аргумент ще бъде броят на аргументите, предадени на програмата. И първият аргумент е името на програмата. Така че този код:

int main(int argc, char **argv) {
    puts(argv[0]);
}

ще отпечата нещо подобно

$ ./a.out
a.out
person klutt    schedule 24.11.2020