LINUX.ORG.RU

warning

 


0

1
#include<stdio.h>

void main()
{
    int *pi=NULL, i=5;
    pi=&i;
    printf("%p %p \n", pi, &i);
}

почему при компиляции warning?:

...$ gcc -Wall ./main10.c -o main10
./main10.c:3:6: warning: return type of ‘main’ is not ‘int’ [-Wmain]



Последнее исправление: dvsie (всего исправлений: 1)

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

aiqu6Ait ★★★★
()
Ответ на: комментарий от aedeph_

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

anonymous
()
Ответ на: комментарий от anonymous

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

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

aiqu6Ait ★★★★
()
Ответ на: комментарий от theNamelessOne

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

dvsie
() автор топика
Ответ на: комментарий от anonymous

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

NeverLoved ★★★★★
()
Ответ на: комментарий от theNamelessOne

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

за 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 = %d\n",primeNum(10));
printf("max=%d\n", 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
() автор топика
Ответ на: комментарий от dvsie

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

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

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

Не знаю.

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

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

theNamelessOne ★★★★★
()
Ответ на: комментарий от aedeph_

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

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

quiet_readonly ★★★★
()
Ответ на: комментарий от theNamelessOne

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

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

quiet_readonly ★★★★
()
Ответ на: комментарий от dvsie

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

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

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

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

dvsie
() автор топика
Ответ на: комментарий от dvsie

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

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

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

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

svr4
()
Ответ на: комментарий от dvsie

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

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

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

svr4
()
Ответ на: комментарий от Eddy_Em

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

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

Deleted
()
Ответ на: комментарий от Eddy_Em

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

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

anonymous
()
Ответ на: комментарий от CYB3R

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

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

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

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

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

anonymous
()
Ответ на: комментарий от Eddy_Em

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

CYB3R ★★★★★
()

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

#include <stdlib.h>

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

    return EXIT_SUCCESS;
}

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

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

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

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 1)
Ответ на: комментарий от anonymous

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

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

emulek
()
Ответ на: комментарий от dvsie

зачем он 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
()
Ответ на: комментарий от emulek

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

Нет.

Dudraug ★★★★★
()
Ответ на: комментарий от Eddy_Em

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

emulek
()
Ответ на: комментарий от emulek

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

derlafff ★★★★★
()
Ответ на: комментарий от emulek

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

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

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

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

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

emulek
()
Ответ на: комментарий от emulek

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

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

derlafff ★★★★★
()
Ответ на: комментарий от emulek

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

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

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

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

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

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

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

anonymous
()
Ответ на: комментарий от Eddy_Em

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

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

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

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

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

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

emulek
()
Ответ на: комментарий от anonymous

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

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

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