LINUX.ORG.RU

Какого файла?

anonymous
()

а в C++ — без?

Не все, а только стандартные, остальные как обычно. Если указать .h у стандартных, не будет std.

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

Ага, только это будет другой файл уже.

anonymous
()

Потому что такой файл существует? :)

zJes ★★
()

Почему в C в директиве #include указывается имя файла с расширением, а в C++ — без?

Страуструп специально так сделал, чтобы ещё больше поднасрать отойти от си

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

вообще то это удобно, если ты ищешь системные заголовки указываешь <head> если нужны заголовки в проекте то «head.h»

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

А вот фиг! Заголовочные файлы от сишных библиотек ты тоже подключаешь как <file.h>

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

Потому что string и string.h это разные файлы. Зависит от стиля именования хидеров, принятых разработчиками конкретной либы.

И Вы надеюсь знаете, чем отличается

#include <хидер>
от
#include "хидер"

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

Труднопроизносимо, в русском не приживаются слова со множественным немягким «э» (то же, что и с двойным «ё»). Так что пусть годуют.

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

хидер

Фидер ☺

Чем отличаются угловые скобки от кавычек — знаю. Таки на сях пописываю всякие велосипеды.

Anon
()
#!/bin/bash

NAME="qwert"
for f in "\"${NAME}1\"" "<${NAME}2>" "\"${NAME}3.h\"" "<${NAME}4.h>"; do
  for cc in gcc g++ clang clang++; do
    echo "#include $f" |
      strace -e trace=open -ff $cc -x c - 2>&1 |
      grep ${NAME} > ${cc}_$f
  done
done
anonymous
()

Тут дело в линковке. Для того, чтоб Сишные функции нормально линковались прототип функций в С++ надо описывать так:

extern "C" {
int c_func(int a);
}

Т.е. если в С мы пишем:

#include <string.h>

То в С++:

#include <cstring>

что эквивалентно

extern "C" {
#include <string.h>
}

P.S. Обычно без extern "C" ничего не ломается (со стандартными либами), однако с ним надёжнее.

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

даже вот так:

#!/bin/bash

NAME="qwert"
for f in "\"${NAME}1\"" "<${NAME}2>" "\"${NAME}3.h\"" "<${NAME}4.h>"; do
  for cc in gcc g++ clang clang++; do
    for x in c c++; do
      echo "#include $f" |
        strace -e trace=open -ff $cc -x $x - 2>&1 |
        grep ${NAME} > ${cc}_${x}_$f
    done
  done
done

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

Что значит «эквивалентно»? Это просто включение другого файла. scring.h и cstring - разные файлы в файловой системе, в которых может быть какое угодно мясо.

kiverattes ★☆
()

Потому что у файлов C++, о которых ведётся речь, в самом деле нет расширения.

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

scring.h и cstring - разные файлы в файловой системе, в которых может быть какое угодно мясо.

$ cat /usr/include/c++/4.7/cstring | grep -n 'string\.h'

31: *  This is the C++ version of the Standard C Library header @c string.h,
44:#include <string.h>
49:// Get rid of those macros defined in <string.h> in lieu of real functions.

Оно то может быть, но не есть. Там включается <string.h> и переносятся ее функции в namespace std. Ну и в макросы завёрнуто extern "C"

KennyMinigun ★★★★★
()

Кстати, кто-нибудь знает как добавить completion для include файлов без расширения в Eclipse CDT?

Пока только кривой способ нашелся через прописывание каждого такого файла в отдельном списке.

kamre ★★★
()

Почему в C в директиве #include указывается имя файла с расширением, а в C++ — без?

уважаемый пользователь Windows, то, что вы называете «расширением» является частью имени. Уже около 20и лет как.

А имя указывается полностью. Просто оно вот такое вот.

emulek
()

На момент стандартизации библиотеки C++ было несколько распостранённых расширений для C++ header файлов: h, hxx, hpp. В коммитете не смогли прийти к согласию, какое из расширений выбрать, поэтому решили вообще убрать расширение.

alexeiz
()

потому что принято, что .h это сишние либы, а без это для с++ с std и прочим ООП.

comp00 ★★★★
()

Открою страшную тайну: в обоих языках указывается полное имя файла

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