Return type of main is not int ошибка

Okay, so everyone is speaking about running C programs UNDER an Operating system. This is totally true:

  • From the standard point, since the main should return int.
  • From the operating systems point, since the int returning from the main is mapped to the exit code of the program.

But no one is speaking of other uncommon conditions that of course can happen when implementing a C program: For example, a C binary that is not being run under any operating system, a C binary that does not return nothing from its main because there is no one to receive or interpret the value, a C binary that actually is the Operating System or a C binary that controls an embedded system where its main function is to synchronize its components inside an infinite loop, waiting for petition (and by definition never returning). The previous examples are more or less equivalent.

In those cases, even if the compiler complains it makes sense to define your main like:

void main()
{
...
}

You have to take warnings seriously, but it is more important to understand what are you actually doing. That is the main caveats of C: With great power comes great responsibility.

If you are under those circumstances, the definition of main does not matter very much since there is no one to call it nor no one to receive its exit value.

Anyway, there is no real concern about the main signature in those circumstances, and optimization does not seem like an improved characteristic of those C programs if they are defined as void main() or as int main(int argc, char* argv[]).

So, conclusion:

  • When expecting to be run under an operating system (I think this would be true most of the time): Use the standard definition of main int main(int argc, char* argv[]). The warning of gcc was considered for these circumstances.
  • When you do not have an operating system: Do as you please, it does not matter, except for the fact of having an annoying warning that does not make sense in those exact circumstances.

Possible Duplicate:
What should main() return in C/C++?

Just started coding C about an hour ago, after a few months of basic java coding, and am encountering a problem compiling the basic hello world program.

Here is my code:

#include < stdio.h>

void main()
{
    printf("nHello Worldn");
}

and this is what i get back when i try to compile:

 Hello.c: In function ‘main’:
 Hello.c:13: warning: return type of ‘main’ is not ‘int’

any help would be much apprecated, thanks!

Evan Carroll's user avatar

Evan Carroll

77.3k45 gold badges255 silver badges460 bronze badges

asked Jan 31, 2013 at 21:49

Joe Perkins's user avatar

3

The standard signatures for main are either

int main(void)

or

int main(int argc, char **argv)

Your compiler is simply enforcing the standard.

Note that an implementation may support void main(), but it must be explicitly documented, otherwise the behavior is undefined. Like dandan78 says, a large number of books and online references get this wrong.

answered Jan 31, 2013 at 21:57

John Bode's user avatar

John BodeJohn Bode

119k19 gold badges119 silver badges197 bronze badges

3

it should be

int main() {}

then you should return 0 if the program is terminating correctly or any other number if there was an error. That’s an Unix convention, so scripts can check if the program was terminated correctly or an error occurred.

Meninx - メネンックス's user avatar

answered Jan 31, 2013 at 21:51

LtWorf's user avatar

LtWorfLtWorf

7,2076 gold badges31 silver badges44 bronze badges

2

main-function in c has to return an int:

#include < stdio.h>

int main()
{
  printf("nHello Worldn");
  return 0;
}

answered Jan 31, 2013 at 21:51

pbhd's user avatar

pbhdpbhd

4,3841 gold badge20 silver badges25 bronze badges

Regardless of which prototype you choose for main(), it’s return value cannot be void. It has to be int. Many books and tutorials get this wrong and some compilers tend to complain while others do not.

answered Jan 31, 2013 at 21:51

dandan78's user avatar

dandan78dandan78

13.2k13 gold badges64 silver badges78 bronze badges

4

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <stdio.h>
#include <stdlib.h>
 
struct student
{   char prizv[12],group[10];
    int sbal ;
    struct student *nast;
    }; struct student *element,*pershij,*poperednij,*novyj;
 
void Spysok(void);
void Vuvestu(void);
void Newel(void);
 
int main()
{  
    
   printf("dlya zak vvody zmit 0n");
   Spysok();
 Vuvestu();
 Newel();
 element=pershij;
 novyj->nast=element;
 pershij=novyj;
 printf("new spisokn");
  Vuvestu();
 
  }
  void Spysok(void){
       element=malloc(sizeof(struct student));
       pershij=element;
       do  {
           poperednij=element;
           printf("prizv,grup and sered baln");
           scanf("%s", element->prizv );
           scanf("%s", element->group );
           scanf("%i", &element->sbal );
           element->nast=malloc(sizeof(struct student));
           element=element->nast;
           
           }
           while ( poperednij->sbal != 0 );
        poperednij->nast = NULL;
       
       
       }
  
 void Vuvestu(void){
      
       printf("stvoremo nev spusokn");
       element=pershij;
       while(element!=NULL)
       {printf("%st%st%dn",element->prizv,element->group,element->sbal);
       element=element->nast;
                           
                           }
      }
      
 
    void Newel(void){
         novyj=malloc(sizeof(struct student));
           printf("prizv,grup and sered baln");
           scanf("%s", element->prizv);
           scanf("%s", element->group);
           scanf("%i", &element->sbal);
         
         }

Добавлено через 5 минут
OKS_by_V, я так понимаю, с английским у тебя неважно…
ошибки:
— много орфографических — сударь, вы пьяны?
— некоторые переменные написаны не так, как объявлены выше.
— в функции список ты делаешь цикл do {} while но не ставишь ; в конце после while.
— забыл #include <stdlib.h> для malloc
— неправильно используешь scanf — для символьных массивов (строк) амперсанд не используется. потому что передается адрес первого элемента — массива (то есть откуда начинается строка).
— для element->sbal необходимо использовать %i или %d

Добавлено через 1 минуту
и кстати, что делает ваш код? к сожалению, в битве экстрасенсов я выбыл в первом раунде

Добавлено через 10 минут
небольшие советы:
— используй чаще клавишу пробел, отделяя элементы.

C
1
element->nast = malloc( sizeof(struct student) );

— после запятой должен быть обязательно пробел.

C
1
printf("%st%st%dn", element->prizv, element->group, element->sbal);

— используй комментарии. это очень важно — приучись к ним.
— называй переменные/функции/объекты/классы и т.д. английскими именами (например read_file)
— по возможности не используй библиотеку #include <conio.h>
В IDE:
— используй автозаполнение и автозавершение слов и функций (в Dev-C++ где-то было). тогда орфографических ошибок не будет.

поищи статьи на тему «красивый код» «стили написания кода» и т.д.

Потому что main должен возвращать int для вашего компилятора/платформы. Но и так работать будет.

aiqu6Ait ★★★★

(05.05.14 03:55:06 MSK)

  • Показать ответы
  • Ссылка

Ответ на:

комментарий
от aiqu6Ait 05.05.14 03:55:06 MSK

Ответ на:

комментарий
от aiqu6Ait 05.05.14 03:55:06 MSK

Ответ на:

комментарий
от anonymous 05.05.14 03:58:08 MSK

Ответ на:

комментарий
от dvsie 05.05.14 03:59:55 MSK

Ответ на:

комментарий
от dvsie 05.05.14 03:59:55 MSK

Ответ на:

комментарий
от aedeph_ 05.05.14 04:01:24 MSK

Не требует, просто интересно где так «void main» учат начинающих, которые не подозревают зачем вообще из main надо что то возвращать.

anonymous

(05.05.14 04:09:22 MSK)

  • Показать ответы
  • Ссылка

Ответ на:

комментарий
от anonymous 05.05.14 03:58:08 MSK

Вот сейчас пишу под pic18 для MCC18,

имеет место быть без ошибок, в то же время под Hi-tech там же, если не ошибаюсь, надо писать

aiqu6Ait ★★★★

(05.05.14 04:10:18 MSK)

  • Ссылка

Ответ на:

комментарий
от theNamelessOne 05.05.14 04:04:43 MSK

спасибо. обучаюсь немного сам
это был пример из обучающих видео «Специалист»
там MS VS 6 — ворнинг левел 4 стоял и предупреждений не было..

dvsie

(05.05.14 04:12:31 MSK)

  • Показать ответы
  • Ссылка

Ответ на:

комментарий
от anonymous 05.05.14 04:09:22 MSK

Везде где учат BorlandC и TurboPascal по методичкам конца девяностых.

  • Ссылка

Ответ на:

комментарий
от anonymous 05.05.14 04:09:22 MSK

Ответ на:

комментарий
от dvsie 05.05.14 04:16:10 MSK

Ответ на:

комментарий
от dvsie 05.05.14 04:12:31 MSK

Ответ на:

комментарий
от theNamelessOne 05.05.14 04:27:49 MSK

ЗЫ — как у вас тег [код] подсвечивать?

за 2 недели освоил 4 лекции..
Вроде неплохо, иногда задумываюсь о том, что там на винде, ну а у меня debian. разница в компиляторах, потом библиотЭки пойдут.. там и погудим, чувствую xD

поставил нетбинс, но пока хватает гедита и терминала.
с функциями он задачу растянул на пол лекции и как мне показалось слишком уж много вложений было в теле с иф-элсами — запутаться можно, поэтому молча просмотрел, но в некоторых местах удалось таки его опередить, чему и рад немного.

И вот момент — непонятно зачем он math.h заинклюдил?

#include<stdio.h>
#include<math.h>
//прототип - "это функция
int primeNum(int limit);
int max3(int a, int b, int c);
// ф максимум из 3 чисел
// ф вычисления простых чисел
int main(void)
{
//вызов ф
   //int c = primeNum(10);
printf("ncount = %dn",primeNum(10));
printf("max=%dn", max3(12,4,7));
return 0;
}
int max3(int a, int b, int c)
{
    return (a>b)? (a>c)?a:c :(b>c)?b:c;
}
int primeNum(int limit)
{
    //создание переменных
    int t, i, count=0, flag;
    //проверка всех входных параметров!
    if (limit<=0)  ;
    else
    {
        printf("1 ");
        count++;
        //цикл по t - 2-limit
        for(t=2;t<=limit;t++)
        {    //цикл по i - 2-sqrt(t)
            flag=1;
            for(i=2;i*i<=t;i++)
            {
                if (t%i==0) 
                    {
                        flag=0; break; 
                    }
            }
            //если простое - печать и count++
            if (flag)
            {
                printf("%4d ", t);
                count++;
            }
        }
    }
    //возврат кол-ва
    return count;
}

dvsie

(05.05.14 05:14:09 MSK)

  • Показать ответы
  • Ссылка

Ответ на:

комментарий
от dvsie 05.05.14 05:14:09 MSK

ЗЫ — как у вас тег [код] подсвечивать?

[code=c][/code]. И вообще: www.linux.org.ru/wiki/en/Lorcode

И вот момент — непонятно зачем он math.h заинклюдил?

Не знаю.

поставил нетбинс, но пока хватает гедита и терминала. с функциями он задачу растянул на пол лекции и как мне показалось слишком уж много вложений было в теле с иф-элсами — запутаться можно, поэтому молча просмотрел, но в некоторых местах удалось таки его опередить, чему и рад немного.

Да выбрось уже эти видеолекции и почитай лучше какую-нибудь книжку.

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от aedeph_ 05.05.14 04:01:24 MSK

Стандарт (пункты 5.1.2.2.1 и 5.1.2.2.3) этого не требует.

Так и ОС не требует, но настоятельно просит предоставить код возврата программы.

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от theNamelessOne 05.05.14 05:57:07 MSK

Да выбрось уже эти видеолекции и почитай лучше какую-нибудь книжку.

Нигилизм в чистом виде. Не надо выбрасывать, пока не будет в руках конкретной более качественной книги.

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от dvsie 05.05.14 04:16:10 MSK

Потому что писать надо int main(int c, char **v)
И не надо учиться плохому!
А чтобы warning’и игнорировать соблазна не было, советую еще -Werror добавлять.

P.S. И не надо смотреть, как быдлокодеры в мастдайке фигней маются!

Eddy_Em

☆☆☆☆☆

(05.05.14 12:12:19 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от dvsie 05.05.14 05:14:09 MSK

Ответ на:

комментарий
от quiet_readonly 05.05.14 12:04:21 MSK

более качественной

Ты эти «видеолекции» чутка помотай — это ж вообще жесть какая-то!

Eddy_Em

☆☆☆☆☆

(05.05.14 12:13:51 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от Eddy_Em 05.05.14 12:13:51 MSK

Интересно, почему же коментарии на русском не устраивают?
А лекции там достаточно хорошие. Всетаки курсы существуют на базе МГТУ Баумана, препод который си ведет — вполне осведомленный, просто он подустал за 8 часов работы и вечером на лекции заинклюдил ненужный хеадер….
Для него мастдайка — работа, тут дело каждого. Скорее, что курс не совсем для новичков, но при желании и это не проблема.

dvsie

(05.05.14 21:58:15 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от dvsie 05.05.14 21:58:15 MSK

почему же коментарии на русском не устраивают?

Потому что это может в привычку войти. И как какой-нибудь нерусский будет твой код читать?

Eddy_Em

☆☆☆☆☆

(05.05.14 23:27:37 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от quiet_readonly 05.05.14 12:02:33 MSK

clang /tmp/t.c
/tmp/t.c:1:1: error: 'main' must return 'int'
void main(){}
^
1 error generated.

Шланг может и так сказать.

svr4

(06.05.14 05:16:44 MSK)

  • Ссылка

Ответ на:

комментарий
от dvsie 05.05.14 04:12:31 MSK

Зато потом очень забавно пытатся заставить VS 2003 (не говоря уж про более поздние) собрать то говно которое писали в шестёрке по принципу «варингов нет и збс».

библиотЭки пойдут

libc/libm на шиндошсе отличаются мелкими ньюансами (например надо писать «rt» или «rb» вместо «r» в fopen). На самом деле, программы написанные с использованием только стандартных ф-й худо-бедно работают и там и там.
Winsock кстати тоже не то чтобы так уж фатально отличается от православных сокетов из 4.2BSD.
Основная веселуха начинается, когда приходится лезть глубже в потроха системного API (хотя и в этом случае можно побыть ленивой задницей и воспользоватся цигвином при компиляции под винды).

svr4

(06.05.14 05:22:15 MSK)

  • Ссылка

Ответ на:

комментарий
от Eddy_Em 05.05.14 12:12:19 MSK

P.S. И не надо смотреть, как быдлокодеры в мастдайке фигней маются!

Таки у мастдайных программистов тоже так принято.

Deleted

(07.05.14 10:19:04 MSK)

  • Ссылка

Ответ на:

комментарий
от Eddy_Em 05.05.14 12:13:18 MSK

P.P.S. Комментарии на русском — это очень плохо.
Eddy_Em

Лол. Наверни koi8r

anonymous

(07.05.14 15:27:43 MSK)

  • Ссылка

Ответ на:

комментарий
от Eddy_Em 05.05.14 12:13:18 MSK

Ответ на:

комментарий
от CYB3R 08.05.14 13:56:57 MSK

Это про ЛОР, а не про исходники. Если у тебя в коде комментарии на русском, то выглядеть ты будешь глупо даже среди русскоязычных прогеров.

Eddy_Em

☆☆☆☆☆

(08.05.14 14:36:02 MSK)

  • Показать ответы
  • Ссылка

Ответ на:

комментарий
от Eddy_Em 08.05.14 14:36:02 MSK

Eddy_Em
Я — не программист! Помните это.

Eddy_Em
Если у тебя в коде комментарии на русском, то выглядеть ты будешь глупо даже среди русскоязычных прогеров.

Ты сам то не забываешь?)

anonymous

(08.05.14 14:50:41 MSK)

  • Ссылка

Ответ на:

комментарий
от Eddy_Em 08.05.14 14:36:02 MSK

Тут я полностью согласен. Названия переменных и комментарии только на английском. По-моему, мы с тобой это уже обсуждали.

CYB3R ★★★★★

(08.05.14 14:56:30 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от CYB3R 08.05.14 14:56:30 MSK

Воn так лучше будет

#include <stdlib.h>

int main() {
    /* программа */

    return EXIT_SUCCESS;
}

Это для простеньких случаев когда фейлов не ожидается (или фейлы сами остановят программу).

Последние 8 бит (или первые, зависит от порядка байт) того, что возвращает main — будут кодом выхода из программы. И если этот код не равен системному EXIT_SUCCESS, то в общем случае это значит, что программа завершилась с ошибкой.

В С99 вроди как уже по умолчанию компилятор в конец ставит пропущенный return EXIT_SUCCESS;. Но для понимания процесса лучше указывать явно.

KennyMinigun ★★★★★

(08.05.14 15:05:15 MSK)



Последнее исправление: KennyMinigun 08.05.14 15:08:27 MSK
(всего

исправлений: 1)

  • Ссылка

Ответ на:

комментарий
от anonymous 05.05.14 04:09:22 MSK

Не требует, просто интересно где так «void main» учат начинающих, которые не подозревают зачем вообще из main надо что то возвращать.

_любая_ программа что-то должна возвращать. Тут дело даже не в сишке.

emulek

(08.05.14 15:48:02 MSK)

  • Ссылка

Ответ на:

комментарий
от dvsie 05.05.14 05:14:09 MSK

зачем он math.h заинклюдил?

для функции sqrt(3)

SQRT(3)                               Linux Programmer's Manual                               SQRT(3)

NAME
       sqrt, sqrtf, sqrtl - square root function

SYNOPSIS
       #include <math.h>

       double sqrt(double x);
       float sqrtf(float x);
       long double sqrtl(long double x);

       Link with -lm.

emulek

(08.05.14 15:50:32 MSK)

  • Ссылка

Ответ на:

комментарий
от Eddy_Em 05.05.14 12:13:18 MSK

Комментарии на русском — это очень плохо.

лучше на русском, чем на кривом английском.

emulek

(08.05.14 15:52:05 MSK)

  • Показать ответы
  • Ссылка

Ответ на:

комментарий
от emulek 08.05.14 15:52:05 MSK

Ответ на:

комментарий
от emulek 08.05.14 15:52:05 MSK

лучше на русском, чем на кривом английском.

Нет.

Dudraug ★★★★★

(08.05.14 16:50:11 MSK)

  • Ссылка

Ответ на:

комментарий
от Eddy_Em 08.05.14 16:43:50 MSK

ох… Диванный теоретик… Какой-нить испанский можно хоть в гуглотранслятор засунуть. А вот кривой английский от русских даже англичанин не распарсит. Смысл в таком комментарии?

emulek

(08.05.14 18:49:45 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от emulek 08.05.14 15:52:05 MSK

Не, лучше таки кривой английский. И русский может понять, транслируя слова из английского в русский, и нерусский при желании.

derlafff ★★★★★

(08.05.14 19:04:39 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от emulek 08.05.14 18:49:45 MSK

Вероятность того, что кто угодно поймет кривой английский, значительно выше вероятности, что кто-то будет выдирать из кода комментарии, переводить гуглопереводчиком и пытаться перевести то, что «напереводил» гугол.

Eddy_Em

☆☆☆☆☆

(08.05.14 19:05:43 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от derlafff 08.05.14 19:04:39 MSK

Не, лучше таки кривой английский.

для тебя — может быть. А я в гробу видал поддерживать такой код.

emulek

(08.05.14 21:20:32 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от Eddy_Em 08.05.14 19:05:43 MSK

программа должна быть так написана, что-бы и без комментариев было понятно что к чему.

А комменты ИМХО это просто заметки в коде, TODO и прочее такое.

А твой код без комментариев не понять?

emulek

(08.05.14 21:24:08 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от emulek 08.05.14 21:20:32 MSK

для тебя — может быть

не для меня, а для всех. а код лучше, от того, что этот горе-разработчик напишет на русском, а не на корявом английском, не станет

derlafff ★★★★★

(08.05.14 21:59:41 MSK)

  • Ссылка

Ответ на:

комментарий
от emulek 08.05.14 21:24:08 MSK

Ты хочешь сказать, что у тебя такой код, что никаких комментариев не надо? Что делает функция, что за параметры в нее передаются, описание полей структур, описание хитрожопых алгоритмов и т.д., и т.п.

Eddy_Em

☆☆☆☆☆

(08.05.14 22:01:56 MSK)

  • Показать ответы
  • Ссылка

Ответ на:

комментарий
от Eddy_Em 08.05.14 22:01:56 MSK

Ты хочешь сказать, что у тебя такой код, что никаких комментариев не надо? Что делает функция, что за параметры в нее передаются, описание полей структур, описание хитрожопых алгоритмов и т.д., и т.п.

У Батти, скорее всего, такой код, что даже и с комментариями не разобраться. :D

А ваще, комментарии нужны чтобы:

  • Писать документацию на API, из которой потом доксиген генерирует маны.
  • Оставлять примечания о хитрожопых алгоритмах и формулах предметной области и ссылки на пейперы с их описанием. Алсо, иногда приходится делать заметки об особенностях оптимизации.
  • Записывать по ходу дела TODO, чтоб потом можно было погрепать и занести в багтрекер.

Больше ни для чего не нужны.

anonymous

(09.05.14 07:48:10 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от theNamelessOne 05.05.14 04:04:43 MSK

тогда нужно приписать std=c99 при компиляции

Andersen ★★

(09.05.14 09:01:04 MSK)

  • Ссылка

Ответ на:

комментарий
от Eddy_Em 08.05.14 22:01:56 MSK

Ты хочешь сказать, что у тебя такой код, что никаких комментариев не надо

это идеал, к которому я стремлюсь.

Что делает функция, что за параметры в нее передаются, описание полей структур

имена зачем придумали? Ну если ты функции называешь ghfdjh(int jhd, float ***qweq), то да, комментарии нужны.

описание хитрожопых алгоритмов и т.д.

это в коде всё равно не лепится. Проще ссылку дать на этот алгоритм, а само описание найти/написать в Сети.

emulek

(09.05.14 17:00:51 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от anonymous 09.05.14 07:48:10 MSK

У Батти, скорее всего, такой код, что даже и с комментариями не разобраться. :D

это смотря кому. Мне — нормально. А про 95% я как-то не думал.

emulek

(09.05.14 17:02:10 MSK)

  • Ссылка

Ответ на:

комментарий
от emulek 09.05.14 17:00:51 MSK

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.

Solution 1

The standard signatures for main are either

int main(void)

or

int main(int argc, char **argv)

Your compiler is simply enforcing the standard.

Note that an implementation may support void main(), but it must be explicitly documented, otherwise the behavior is undefined. Like dandan78 says, a large number of books and online references get this wrong.

Solution 2

it should be

int main() {}

then you should return 0 if the program is terminating correctly or any other number if there was an error. That’s an Unix convention, so scripts can check if the program was terminated correctly or an error occurred.

Solution 3

main-function in c has to return an int:

#include < stdio.h>

int main()
{
  printf("nHello Worldn");
  return 0;
}

Related videos on Youtube

xv6 Kernel-13: entry.S + start.c

26 : 48

xv6 Kernel-13: entry.S + start.c

hello, C

01 : 49

#15 how to return a value from a function | return type in c | return int | return type function

12 : 03

#15 how to return a value from a function | return type in c | return int | return type function

Learning C Language -  About Problems Error, Exception and Warning

08 : 51

Learning C Language — About Problems Error, Exception and Warning

Three Ways to Reverse The Letters In An Excel Cell - 2391

07 : 57

Three Ways to Reverse The Letters In An Excel Cell — 2391

C Programming Tutorial for Beginners

03 : 46 : 13

C Programming Tutorial for Beginners

C/C++ VISUAL STUDIO CODE (1d returned error)//WINDOWS 10

00 : 55

C/C++ VISUAL STUDIO CODE (1d returned error)//WINDOWS 10

10 Warning Signs You Already Have Dementia

22 : 13

10 Warning Signs You Already Have Dementia

What Happens If You Don't Eat For 5 Days?

35 : 23

What Happens If You Don’t Eat For 5 Days?

Why does (0 == Hello) return true in PHP - PHP

01 : 04

Why does (0 == Hello) return true in PHP — PHP

Comments

  • Possible Duplicate:
    What should main() return in C/C++?

    Just started coding C about an hour ago, after a few months of basic java coding, and am encountering a problem compiling the basic hello world program.

    Here is my code:

    #include < stdio.h>
    
    void main()
    {
        printf("nHello Worldn");
    }
    

    and this is what i get back when i try to compile:

     Hello.c: In function ‘main’:
     Hello.c:13: warning: return type of ‘main’ is not ‘int’
    

    any help would be much apprecated, thanks!

    • Get a better book or tutorial: void main is incorrect — it should be int main. (Unfortunately there are some bad books on C out there which use void main and you will often see this perpetuated in code examples on the web).

  • The return type of main could be void as well as anything else, it’s implementation-defined whether a signature is valid or not, and its behavior could be unspecified.

  • thanks for this, any idea where i’d be able to find an accurate tutorial/beginners guide to C online? After looking through a couple have realised a lot make this mistake.

  • @JoePerkins: I don’t personally know of a good online tutorial or guide for beginners; all the ones I’ve seen are pretty wretched. However, there is the comp.lang.c FAQ, which is pretty good, and the latest language standard is available here. Neither is the greatest learning resource, but they at least don’t lead you astray.

  • @JoePerkins buy a good book, you can find a list in the information page of the c tag here on SO.

  • The standard says #include <stdlib.h> …. exit(EXIT_SUCCESS) or exit(EXIT_FAILURE)

  • What sandard says that? Usually different values for the exit codes are used so that is possible to distinguish between errors.

  • @effeffe Sorry to revive post on an old question but C++ standard section 3.6.1.2 states «An implementation shall not predefine the main function. This function shall not be overloaded. It shall have a return type of type int, but otherwise its type is implementation-defined. All implementations shall allow both of the following definitions of main : int main() {/∗. . .∗/} and int main(int argc , char* argv[]) {/∗. . .∗/}

  • @jodag this question is about C, not C++.

  • @effeffe Oops, I was reading the «possible duplicate» section and saw C/C++ so assumed it was pertaining to C++ as well. My bad.

Recents

Related

Возможно, вам также будет интересно:

  • Return to castle wolfenstein ошибка opengl как исправить
  • Return to castle wolfenstein выдает ошибку
  • Return self func args ошибка
  • Restart trusted cs go ошибка
  • Rest api выдал ошибку wordpress

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии