Форум программистов, компьютерный форум, киберфорум
С под Linux
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 14.09.2016
Сообщений: 149
1

Программирование в си в линуксе. Пожалуйста

13.10.2017, 14:19. Показов 578. Ответов 9

Написал программу и попытался запустить файл с ней. Вышла ошибка. Как её исправить? Прикладываю файлы с ошибкой и с программой.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Миниатюры
Программирование в си в линуксе. Пожалуйста   Программирование в си в линуксе. Пожалуйста  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2017, 14:19
Ответы с готовыми решениями:

Программирование PIC без IDE в Линуксе
Всем привет. Я новенький в этом деле. Возможно ли программировать контроллеры PIC без...

программирование на mulisp.Пожалуйста
Описать функцию, которая на основе списка чисел формирует спиcок-результат следующим образом :...

Программирование MPS430F1101AIDS TI ПОМОГИТЕ, пожалуйста!
Доброго всем дня! В свое время был собран таймер на MSP430F1101AIDW TI. Была написана под него...

Друзья! Выполните, пожалуйста, программирование по Mathcad!
Задание №1) В одномерном массиве, состоящем из n вещественных элементов, вычислить: максимальный...

9
1507 / 905 / 584
Регистрация: 25.04.2016
Сообщений: 2,521
13.10.2017, 15:38 2
Есть два варианта решения.

1. заменить exit() на return 0, т.е.:
C
1
2
3
4
5
6
#include <stdio.h>
int main(void)
{
     /* код программы */
     return 0;
}
2. Добавить #include <stdlib.h> в начало программы, чтобы компилятор нашел функцию exit:
C
1
2
3
4
5
6
7
8
#include <stdio.h>
#include <stdlib.h>
 
int main (void)
{
    /* код программы */
    exit(0);
}
Добавлено через 24 минуты
объявление функции main в виде int main() означает, что функция в результате своей работы должна вернуть целое число. Так уж сложилось исторически, что нулевое значение сигнализирует об успешном завершении программы (функция вернула true), в то время как любое другое - о том, что в ходе выполнения программы возникли ошибки (функция вернула false).

Оператор return, равно как и функция exit() как раз и занимаются тем, что возвращают это значение. Фактически обе эти команды присваивают "переменной" main некое целое число. Не стоит понимать эту фразу буквально, но суть именно в этом.

Ваша ошибка сигнализирует о том, что в программе используется необъявленная функция exit, для того, чтобы компилятор ее "увидел", нам необходимо прикрутить еще один заголовочный файл из стандартной библиотеки - stdlib.h, в котором как раз и объявлена функция exit.

И здесь мы можем, либо заменить exit на return, либо прописать #include <stdlib.h>, либо поменять объявление функции main на:
void main(void)

Либо вообще выкинуть из программы exit(). Хотя последние два варианта являются не совсем правильными с точки зрения современных стандартов языка.

А для чего вообще функции main возвращать какое-то значение и кому оно может понадобиться? После выполнения программы это значение хранится в переменной ? - это имя переменной такое, а не просто знак вопроса, и мы можем узнать какое значение вернула нам программа, написав в терминале: echo $?

Если хотите убедиться в этом так сказать на своей шкуре, то изменить значение, возвращаемое функцией, например, замените exit(-1) на exit(2), пересоберите программу с помощью gcc, запустите программу снова и после завершения введите упомянутую ранее команду:
echo $?

Добавлено через 18 минут
Такое соглашение о возвращаемых программами значениях принято между программистами, и с точки зрения языка си все как раз наоборот: любое ненулевое значение - это истина, а нулевое - ложь. Убедиться в этом вы можете на следующем примере:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main (void)
{
    /* код программы */
    int i = -5;
    while(i)
    {
        printf("%d\n", i);
        i++;
    }
    return 0;
}
Точно так же любое положительное ненулевое значение будет восприниматься как истина.
0
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
15.10.2017, 12:51 3
Матричный бог, вместо print написать printf
stake-k26, стандартная либа линкуется gcc, поэтому на любую функцию из stdlib выдаст варнинг, но скомпилирует и слинкует. В шелл возвращаются положительные числа, от 0 до 255, где для некоторых номеров ошибок есть стандартные описания.
0
Don't worry, be happy
17170 / 10053 / 1935
Регистрация: 27.09.2012
Сообщений: 25,045
Записей в блоге: 1
15.10.2017, 21:03 4
Цитата Сообщение от stake-k26 Посмотреть сообщение
заменить exit() на return 0, т.е.:
В конце main return не обязателен.
0
1507 / 905 / 584
Регистрация: 25.04.2016
Сообщений: 2,521
17.10.2017, 08:56 5
Цитата Сообщение от Croessmah Посмотреть сообщение
В конце main return не обязателен.
Читайте внимательнее:
Цитата Сообщение от stake-k26 Посмотреть сообщение
Либо вообще выкинуть из программы exit().
0
Почетный модератор
11236 / 4189 / 420
Регистрация: 12.06.2008
Сообщений: 12,082
17.10.2017, 19:10 6
Цитата Сообщение от Croessmah Посмотреть сообщение
В конце main return не обязателен.
Компилятор будет предупреждение выдавать, если функция должна вернуть int, но при этом ничего не возвращает.
0
Don't worry, be happy
17170 / 10053 / 1935
Регистрация: 27.09.2012
Сообщений: 25,045
Записей в блоге: 1
17.10.2017, 19:52 7
Humanoid, согласно стандарту языка C,
если в конце main отсутствует return,
то поведение аналогично присутствию return 0.
Вряд ли компиляторы будут выдавать предупреждения.
0
Почетный модератор
11236 / 4189 / 420
Регистрация: 12.06.2008
Сообщений: 12,082
17.10.2017, 23:34 8
Цитата Сообщение от Croessmah Посмотреть сообщение
Вряд ли компиляторы будут выдавать предупреждения.
Я попробовал. gcc 4.8.5 с опцией -Wall выдаёт:
Код
a.c: In function ‘main’:
a.c:3:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
В стандарте только для main() такое исключение? На сколько я понимаю, если у любой функции нет return, то возвращается нулевое значение, нулевой указатель или структуру, заполненную нулями.
0
Don't worry, be happy
17170 / 10053 / 1935
Регистрация: 27.09.2012
Сообщений: 25,045
Записей в блоге: 1
18.10.2017, 00:05 9
Цитата Сообщение от Humanoid Посмотреть сообщение
Я попробовал. gcc 4.8.5 с опцией -Wall выдаёт:
Скорее всего компилируете в режиме C89.
Такое требование, емнип, появилось только в C99.
попробуйте добавить ключик -std=c99.
Цитата Сообщение от Humanoid Посмотреть сообщение
В стандарте только для main() такое исключение?
Да.
If the return type of the main function is a type compatible with int, a return from the initial call to the main function is equivalent to calling the exit function with the value returned by the main function as its argument; reaching the } that terminates the main function returns a value of 0.
Цитата Сообщение от Humanoid Посмотреть сообщение
На сколько я понимаю, если у любой функции нет return, то возвращается нулевое значение, нулевой указатель или структуру, заполненную нулями.
В GCC - может быть, но я бы не стал на это полагаться на все 100%.
Из стандарта:
If the } that terminates a function is reached, and the value of the function call is used by the caller, the behavior is undefined.
Добавлено через 2 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
Такое требование, емнип, появилось только в C99.
Да. Из C89:
A return from the initial call to the main function is equivalent to calling the exit function with the value returned by the main function as its argument. If the } that terminates the main function is reached, the termination status returned to the host environment is unspecified.
1
Почетный модератор
11236 / 4189 / 420
Регистрация: 12.06.2008
Сообщений: 12,082
18.10.2017, 10:07 10
Цитата Сообщение от Croessmah Посмотреть сообщение
Такое требование, емнип, появилось только в C99.
попробуйте добавить ключик -std=c99.
Да, с c99 для main() не выдаёт предупреждений. Ну и накрутили они сложностей на ровном месте
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.10.2017, 10:07

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

Оцените пожалуйста сборку. Рендер видео, программирование, тихий
Компьютер нужен тихий (поэтому выбрал специально соответствующий корпус, бп, кулер на проц) , и...

QT в Линуксе
Здравствуйте! Я буду делать курсовую в QT на С++, мне посоветовали работать с QT в Линуксе, а не...

бд в линуксе
Здравствуйте. А вы пишите БД в линуксе в программе kate?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.