<cstring> импортирует size_t, strlen, strcat в global namespace?

Модератор: Модераторы разделов

sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

<cstring> импортирует size_t, strlen, strcat в global namespace?

Сообщение sergio »

Возясь с соседним топиком тут обнаружил такую вот неувязочку...
Формально, вроде как, непорядочек. Страдает этим не только систринг, но и то, что его подключает, например <iostream>. Отслеживать откуда это проистекает я упарился, поск не знаю нутров и заковырок библиотеки. Лет пять назад фиксил такую же дрянь в борланде - там где-то <хедер.h> вместо <cхедер> в заголовках стояло... :angry:

Код: Выделить всё

Package: libstdc++6-4.1-dev
Status: install ok installed
Priority: standard
Section: libdevel
Installed-Size: 10216
Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
Architecture: i386
Source: gcc-4.1 (4.1.1ds2-21)
Version: 4.1.1-21

Это четвертый дебиан i386 stable.

Где-нибудь написано, что "оно неправильно, мы знаем, но так надо"?
Что общественность предполагает с этим делать? :drunk:
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: <cstring> импортирует size_t, strlen, strcat в global namespace?

Сообщение v04bvs »

А как это влияет на программу?
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: <cstring> импортирует size_t, strlen, strcat в global namespace?

Сообщение sergio »

Разобрались. Почти.

forwarded 438791 http://gcc.gnu.org/PR6257
thanks

This is a well-known problem, and it might even turn out that gcc's
behavior is legalized in the next standard update.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=6257
http://www.open-std.org/jtc1/sc22/wg21/doc...efects.html#456

Это старая история, до сих пор два языка нормально связать не могут. Усложняецо тем, что c++lib как бы может быть отдельно от clib, т.е. в общем случае плюсовые хедеры должны быть способны взаимодействовать с сишными "от стороннего производителя".
Cтараниями комитетчиков и суровой реальности, все, что 10 лет назад надеялись в std запаковать, теперь может оказаться где угодно.

v04bvs писал(а):
19.08.2007 22:37
А как это влияет на программу?

Если вы ее написали без ошибок - то никак. А вот исходники, исправно откомпилировавшиеся под g++ без ворнингов, могут оказаться непереносимыми без правки напильником под компилятор соответствующий актуальному стандарту языка.

Код: Выделить всё

  #include <iostream>
  #include <cstring>

  int main()  {
    const char* s = "Blahblah";
    std::cout << s << ':' << strlen(s) << std::endl;
    return  0;
  }


g++ это ест. По стандарту не должен.
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
prayer
Сообщения: 8
ОС: Mandriva

Re: <cstring> импортирует size_t, strlen, strcat в global namespace?

Сообщение prayer »

using namespace std Вам не подойдет?
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: <cstring> импортирует size_t, strlen, strcat в global namespace?

Сообщение sergio »

prayer писал(а):
20.08.2007 18:39
using namespace std Вам не подойдет?

Нет. :cray:
Директива

Код: Выделить всё

! using namespace std;

подошла бы, но такой пока нет. :D
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: <cstring> импортирует size_t, strlen, strcat в global namespace?

Сообщение v04bvs »

Вообще про заголовочные файлы в gcc писал ещё Пушкин: "Там чудеса, там леший бродит, там на невиданных дорожках следы невиданных зверей" :D
Спасибо сказали: