old .C proto style
От: jyuyjiyuijyu  
Дата: 07.11.11 11:45
Оценка:
Всем привет

есть древний код в старом C стиле надо скомпилировать как .cpp в VS 2008
когда я собираю как .c то все нормально но когда как .cpp компилятор выплевывает
кучу ошибок может можно что то сделать ?
static char *
my_index (str, chr)
     const char *str;
     int chr;
{
  while (*str)
    {
      if (*str == chr)
    return (char *) str;
      str++;
    }
  return 0;
}
Re: old .C proto style
От: 8086  
Дата: 07.11.11 12:01
Оценка:
Почему не оставить старый код в файлах с расширением .с?
Re: old .C proto style
От: Banned by IT  
Дата: 07.11.11 12:01
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>есть древний код в старом C стиле надо скомпилировать как .cpp в VS 2008

J>когда я собираю как .c то все нормально но когда как .cpp компилятор выплевывает
J>кучу ошибок может можно что то сделать ?

Ошибки или предупреждения?
Тыб их привёл что ли.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: old .C proto style
От: okman Беларусь https://searchinform.ru/
Дата: 07.11.11 12:11
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>когда я собираю как .c то все нормально но когда как .cpp компилятор выплевывает

J>кучу ошибок может можно что то сделать ?

Для начала заменить это:
static char *
my_index (str, chr)
    const char *str;
    int chr;
{
// ...

На это:
static char *
my_index (char const *str, int chr)
{
// ...
Re[2]: old .C proto style
От: jyuyjiyuijyu  
Дата: 07.11.11 12:25
Оценка:
Почему не оставить старый код в файлах с расширением .с?
я бы так и сделал но надо вставить шаблоны именно в этот код
они кое чего подменят в старом коде вообщем поэтому мне и надо было откомпилить
их как .cpp

Ошибки или предупреждения?
Тыб их привёл что ли.

касательно функции что я привел

.\getopt.cpp(192) : error C2065: 'str' : undeclared identifier
.\getopt.cpp(192) : error C2065: 'chr' : undeclared identifier
.\getopt.cpp(192) : error C2078: too many initializers
.\getopt.cpp(193) : error C2143: syntax error : missing ';' before 'const'
.\getopt.cpp(193) : error C2059: syntax error : 'const'
.\getopt.cpp(195) : error C2447: '{' : missing function header (old-style formal list?)

Для начала заменить это:
static char *
my_index (str, chr)
const char *str;
int chr;
{
// ...


На это:
static char *
my_index (char const *str, int chr)
{
// ...


это то понятно я надеялся на хак/трюк/ключ компилятора это же не одна функция
тысячи строк это программа древняя netcat называется в исходниках распространяется
Re[3]: old .C proto style
От: sidorov18 США  
Дата: 07.11.11 12:46
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>Почему не оставить старый код в файлах с расширением .с?

J>я бы так и сделал но надо вставить шаблоны именно в этот код
J>они кое чего подменят в старом коде вообщем поэтому мне и надо было откомпилить
J>их как .cpp

J>Ошибки или предупреждения?

J>Тыб их привёл что ли.

J>касательно функции что я привел


J>.\getopt.cpp(192) : error C2065: 'str' : undeclared identifier

J>.\getopt.cpp(192) : error C2065: 'chr' : undeclared identifier
J>.\getopt.cpp(192) : error C2078: too many initializers
J>.\getopt.cpp(193) : error C2143: syntax error : missing ';' before 'const'
J>.\getopt.cpp(193) : error C2059: syntax error : 'const'
J>.\getopt.cpp(195) : error C2447: '{' : missing function header (old-style formal list?)

J>Для начала заменить это:

J>static char *
J>my_index (str, chr)
J> const char *str;
J> int chr;
J>{
J>// ...


J>На это:

J>static char *
J>my_index (char const *str, int chr)
J>{
J>// ...


J>это то понятно я надеялся на хак/трюк/ключ компилятора это же не одна функция

J>тысячи строк это программа древняя netcat называется в исходниках распространяется

Вы б добавляли теги автора при цитировании и использовали форматирование — было бы супер. Возможно, желающих помочь прибавилось даже.
Re[3]: old .C proto style
От: uzhas Ниоткуда  
Дата: 07.11.11 12:57
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>тысячи строк это программа древняя netcat называется в исходниках распространяется


я так понимаю, что сама netcat не использует старый способ декларации функций
пример: http://netcat.cvs.sourceforge.net/viewvc/netcat/netcat/src/netcore.c?revision=1.2&amp;view=markup

старая форма декларации используется в getopt, сторонняя либа, которую вы можете скачать отдельно. возможно, там исходники причесали
да и фиксить декларации не должно быть сложным: в getopt всего два *.c файла : http://netcat.cvs.sourceforge.net/viewvc/netcat/netcat/lib/contrib/
Re[3]: old .C proto style
От: _nn_ www.nemerleweb.com
Дата: 07.11.11 13:17
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>это то понятно я надеялся на хак/трюк/ключ компилятора это же не одна функция

J>тысячи строк это программа древняя netcat называется в исходниках распространяется

Оффтопик
А может вам socat подойдет ?
Поновее, да и возможностей побольше
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: old .C proto style
От: jyuyjiyuijyu  
Дата: 07.11.11 13:30
Оценка: :)

я так понимаю, что сама netcat не использует старый способ декларации функций
пример: http://netcat.cvs.sourceforge.net/viewvc/netcat/netcat/src/netcore.c?revision=1.2&amp;view=markup

значит у меня не самая свежая весия вообще я скачал первые попавшиеся исходники
и стал их собирать вот эти исходники тут и файлы то другие и декларации везде старые

http://joncraton.org/media/files/nc111nt.zip

да и фиксить декларации не должно быть сложным: в getopt всего два *.c файла : http://netcat.cvs.sourceforge.net/viewvc/netcat/netcat/lib/contrib/

я тут такое встретил еще хлеще )
/* holler :
   fake varargs -- need to do this way because we wind up calling through
   more levels of indirection than vanilla varargs can handle, and not all
   machines have vfprintf/vsyslog/whatever!  6 params oughta be enough. */
void holler (str, p1, p2, p3, p4, p5, p6)
  char * str;
  char * p1, * p2, * p3, * p4, * p5, * p6;
{
  if (o_verbose) {
    fprintf (stderr, str, p1, p2, p3, p4, p5, p6);
#ifdef WIN32
    if (h_errno)
        fprintf (stderr, ": %s\n",winsockstr(h_errno));
#else
    if (errno) {        /* this gives funny-looking messages, but */
      perror (" ");        /* it's more portable than sys_errlist[]... */
    }                /* xxx: do something better.  */
#endif
    else
      fprintf (stderr, "\n");
    fflush (stderr);
  }
} /* holler */

/* bail :
   error-exit handler, callable from anywhere */
void bail (str, p1, p2, p3, p4, p5, p6)
  char * str;
  char * p1, * p2, * p3, * p4, * p5, * p6;
{
  o_verbose = 1;
  holler (str, p1, p2, p3, p4, p5, p6);
#ifdef WIN32
  shutdown(netfd, 0x02);  /* Kirby */
  closesocket (netfd);
#else
  close (netfd);
#endif
  sleep (1);
  exit (1);
} /* bail */

/* catch :
   no-brainer interrupt handler */
void catch ()
{
  errno = 0;
   if (o_verbose > 1)        /* normally we don't care */
    bail (wrote_txt, wrote_net, wrote_out);

  bail (" punt!");
}

когда исправил
void bail (str, p1, p2, p3, p4, p5, p6)
char * str;
char * p1, * p2, * p3, * p4, * p5, * p6;

на нормальную версию вообще функция вызыватся отказалась
просто так еще не достаточно изменить тут антицепепе стиль во всю ))
чего только стоит имя функции catch ))
Re[4]: old .C proto style
От: jyuyjiyuijyu  
Дата: 07.11.11 13:45
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Оффтопик

__>А может вам socat подойдет ?
__>Поновее, да и возможностей побольше

может и подойдет раньше юзал netcat систему недавно переустанавливал все пропало теперь потихоньку восстанавливаю то одного нет то другого непривычно все пропало и что самое обидное ладно бы вирус какой нить уничтожил а то вполне легальная прога norton partition magic запустил чтоб изменила размеры разделов она попросила ребут а потом выкинула какую то ошибку судя по времени а у меня еще загрузка была с ключом /noguiboot я про него забыл так я и не узнал что там за ошибка была ))
Re: old .C proto style
От: Vamp Россия  
Дата: 07.11.11 14:03
Оценка:
J>когда я собираю как .c то все нормально но когда как .cpp компилятор выплевывает
J>кучу ошибок может можно что то сделать ?
Да. Компилировать С-компилятором, а не C++. Это, вообще говоря, разные языки.
Да здравствует мыло душистое и веревка пушистая.
Re[5]: old .C proto style
От: _nn_ www.nemerleweb.com
Дата: 07.11.11 14:08
Оценка: :)
Здравствуйте, jyuyjiyuijyu, Вы писали:


J>на нормальную версию вообще функция вызыватся отказалась

J>просто так еще не достаточно изменить тут антицепепе стиль во всю ))
J>чего только стоит имя функции catch ))

Новое слово в науке AntiC++ style.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: old .C proto style
От: MasterZiv СССР  
Дата: 07.11.11 18:23
Оценка:
On 11/07/2011 04:25 PM, jyuyjiyuijyu wrote:

> это то понятно я надеялся на хак/трюк/ключ компилятора это же не одна функция

> тысячи строк это программа древняя netcat называется в исходниках распространяется

Лучше компилируй эти исходники на С, а где нужно, вставиш вызова С-шных
функций, которые определиш в отдельном исходном модуле, на С++, там же сделаешь
все шаблоны. Правда, их все придётся явно инстанциировать, но это не думаю, что
будет сложно.

С++ умеет делать С-шные функции, наоборот — нет.
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.