LINUX.ORG.RU

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


0

0

нашел на либру Страустрапа и компилю следующие проги:

 // header.h

          extern char * prog_name;
          extern void f ();

    Файл main.c является основной программой:

          // main.c

          #include "header.h"
          char * prog_name = "примитивный, но законченный пример";
          int main ()
          {
            f ();
          }

    а строка печатается функцией из файла f.c:

          // f.c

          #include <stream.h>
          #include "header.h"
          void f ()
          {
            cout << prog_name << '\n';
          }

Все работает, но при этом оно пишет про несоответствие стандартам, че ей надо?

[root@mobile100 cex]# c++ main.c f.c -o silly
In file included from /usr/include/c++/3.2.2/backward/iostream.h:31,
                 from f.c:2:
/usr/include/c++/3.2.2/backward/backward_warning.h:32:2: warning: 
#warning This file includes at least one deprecated or antiquated 
header. Please consider using one of the 32 headers found in section 
17.4.1.2 of the C++ standard. Examples include substituting the <X> 
header for the <X.h> header for C++ includes, or <sstream> instead of 
the deprecated header <strstream.h>. To disable this warning use 
-Wno-deprecated.
[root@mobile100 cex]# ls
f.c  f.c~  header.h  header.h~  main.c  main.c~  silly
[root@mobile100 cex]#

anonymous

Есть защита против повторного включения хидера. Для этого надо прописать в начале хидера
#ifndef HEADER.H /*HEADER - это название твоего хидера*/
#define HEADER.H
/******************/
/* А это - в конце хидера*/
#endif
Все. Вроде должен не ругаться. А то он ругается на отсутствие этой защиты.

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

// f.c #ifndef header.h /*HEADER - это название твоего хидера*/ #define header.h #include <iostream.h> #include "header.h" #endif void f () { cout << prog_name << '\n'; }

[root@mobile100 cex]# c++ main.c f.c -o silly f.c:2:15: warning: extra tokens at end of #ifndef directive f.c:3:15: warning: ISO C requires whitespace after the macro name In file included from /usr/include/c++/3.2.2/backward/iostream.h:31, from f.c:4: /usr/include/c++/3.2.2/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <sstream> instead of the deprecated header <strstream.h>. To disable this warning use -Wno-deprecated. [root@mobile100 cex]#

вот так вот!! :(

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

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

// f.c
#ifndef header.h /*HEADER - это название твоего хидера*/
#define header.h
#include <iostream.h>
#include "header.h"
#endif
void f () {
  cout << prog_name << '\n';
}

[root@mobile100 cex]# c++ main.c f.c -o silly
f.c:2:15: warning: extra tokens at end of #ifndef directive
f.c:3:15: warning: ISO C requires whitespace after the macro name
In file included from /usr/include/c++/3.2.2/backward/iostream.h:31,
                 from f.c:4:
/usr/include/c++/3.2.2/backward/backward_warning.h:32:2: warning: 
#warning This file includes at least one deprecated or antiquated 
header. Please consider using one of the 32 headers found in section 
17.4.1.2 of the C++ standard. Examples include substituting the <X> 
header for the <X.h> header for C++ includes, or <sstream> instead of 
the deprecated header <strstream.h>. To disable this warning use 
-Wno-deprecated.
[root@mobile100 cex]#

вот так вот!! :(

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

чето ниче не запостить... !!

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

по этому поводу:

// f.c
#include <stream>
#include "header.h"
#endif
void f () {
  cout << prog_name << '\n';
}

дает ошибку

[root@mobile100 cex]# c++ main.c f.c -o silly
f.c:2:18: stream: No such file or directory
f.c: In function `void f()':
f.c:5: `cout' undeclared (first use this function)
f.c:5: (Each undeclared identifier is reported only once for each function it
   appears in.)
[root@mobile100 cex]#

на это

// f.c
#include <iostream>
#include "header.h"
void f () {
  cout << prog_name << '\n';
}

дает ошибку

File f.c not changed so no update needed.
[root@mobile100 cex]# c++ main.c f.c -o silly
f.c: In function `void f()':
f.c:5: `cout' undeclared (first use this function)
f.c:5: (Each undeclared identifier is reported only once for each function it
   appears in.)
[root@mobile100 cex]#

Че делать? 

Короче, в принципе оно конешно работает, но как то после 
#!/usr/bin/perl -w или use strict; use warnings непонятно, 
откуда это все, че ей не нравится. Может команда cout 
устарела просто со времен страустрапа?

Причем, если я кимпилю gcc, выскакивает ошибка что нет либы.
 Если я компилю cc выскакивает что нет либы stream или iostream

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

#include </usr/include/c++/3.2.2/backward/stream.h>

д

vilfred ☆☆
()

Не того Страустроупа читал, ищи 3-ю редакцию

Читай не просто С++, а стандарт ISO С++. Там все стандартные заголовочные файлы заменены на такие же, но без раширений. И все помещено в namespace std.

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