запустить программу c - stdio.h где мне ее взять? - PullRequest
3 голосов
/ 10 марта 2012

Рассматривая изучение C. Как я понимаю, когда я говорю #include <stdio.h>, он берет stdio.h из местоположения по умолчанию ... обычно это каталог внутри вашего рабочего каталога, называемый include. Как мне получить файл stdio.h? Нужно ли загружать кучу файлов .h и перемещать их из проекта в проект в каталоге include? Я сделал следующее в файле test.c. Затем я запустил make test, и он вывел двоичный файл. Когда я бежал ./test я не увидел привет печать на моем экране. Я думал, что не вижу выходных данных, возможно, потому что он не находит библиотеку stdio.h. Но опять же, если я удаляю знаки больше или меньше в stdio, компилятор выдаст мне ошибку. Есть идеи?

Я на Mac, работающем из командной строки. Я использую: GNU Make 3.81. Эта программа построена для i386-apple-darwin10.0

#include <stdio.h>

main()
{
  printf("hello");
}

Редактировать: я обновил свой код, включив в него тип данных для основной функции и возвращая 0. Я все еще получаю тот же результат ... компилируется без ошибок, и когда я запускаю файл ./test, он ничего не печатает на экране.

#include <stdio.h>

int main()
{
  printf("hello");
  return 0;
}

Обновление: Если я добавлю \ n внутри printf, это сработает! так что это будет работать:

#include <stdio.h>

    int main()
    {
      printf("hello\n");
      return 0;
    }

Ответы [ 4 ]

1 голос
/ 10 марта 2012

Ваш код должен иметь предпочтительно

 printf("hello\n");

или

 puts("hello");

Если вы хотите знать, откуда берется стандартный заголовочный файл <stdio.h>, вы можете запустить свой компилятор с соответствующими флагами. Если это gcc, попробуйте скомпилировать с

gcc -H -v -Wall hello.c -o hello

Педантически, даже не требуется, чтобы стандартный заголовочный файл существовал как файл ; Стандарт допускает реализацию, которая обрабатывает #include <stdio.h> без доступа к файловой системе (но, например, путем извлечения внутренних ресурсов внутри компилятора или из базы данных ...). Немногие компиляторы ведут себя таким образом, большинство из них имеют доступ к чему-то в файловой системе.

1 голос
/ 10 марта 2012

Если у вас нет файла, вы получите ошибку компиляции.

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

Кроме того, main возвращает int, и вы должны return 0;, чтобы сообщить об успешном завершении.

0 голосов
/ 02 декабря 2018

Просто собираюсь оставить это здесь: ЕЩЕ! в 2018 году, декабрь ... Linux Mint 18.3 не поддерживает разработку на C.

innocent / # cc TheseSorts.c

TheseSorts.c: 1: 19: фатальная ошибка: stdio.h: нет такого файла или каталога компиляция прекращена.

innocent / # gcc TheseSorts.c

TheseSorts.c: 1: 19: фатальная ошибка: stdio.h: нет такого файла или каталога компиляция прекращена.

innocent / # apt show libc6

(сокращенная) ::
Пакет: libc6
Версия: 2.23-0ubuntu10
Приоритет: требуется
Раздел: libs
Источник: glibc
Происхождение: Ubuntu
Установленный размер: 11,2 МБ
Зависит от: libgcc1
Домашняя страница: http://www.gnu.org/software/libc/libc.html
Описание: Библиотека GNU C: общие библиотеки
Содержит стандартные библиотеки, которые используются почти всеми программами на
система. Этот пакет включает в себя общие версии стандартной библиотеки C
и стандартная математическая библиотека, а также многие другие.

innocent / # apt-get install libc6-dev libc-dev
Итак, магия ... и через минуту все они установлены на компьютер, а затем все работает как надо.

Не все дистрибутивы объединяют все библиотеки поддержки C в каждом ISO. Hunh.

вряд ли невинный / # gcc TheseSorts.c

вряд ли невинный / # ./a.out

20 18 17 16 ... ... ...

0 голосов
/ 10 марта 2012

#include <header.h>, с угловыми скобками, поиск в стандартных системных местоположениях, известных компилятору, а не в подкаталогах вашего проекта.В системах Unix (включая ваш Mac, я полагаю), stdio.h обычно находится в / usr / include.Если вы используете #include "header.h", вы сначала ищете подкаталоги, а затем те же места, что и с <header.h>.

Но вам не нужно искать или копировать заголовок для запуска вашей программы.Он читается во время компиляции, поэтому вашему ./test он вообще не нужен.Ваша программа выглядит так, как будто она должна была работать.Возможно ли, что вы просто набрали «test», а не «./test», и получили системную команду «test»?(Предложение: не называйте свои программы «тестовыми».)

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