powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / fprintf помогите чайнику
16 сообщений из 16, страница 1 из 1
fprintf помогите чайнику
    #33124592
Tural
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Человеку не знающему С++ пришлось написать маленькую программу которая должна работать на Soleris-е. Написал. Теперь пришлось там поменять тип int на long. И тут-то возникла проблема. Есть такая строка

fprintf(FILE_OUTPUT, "%i;", i4);

где i4 переменная типа int. Теперь int сделали long. В исходящем файле кроме цифр появился еще какой-то мусор. На что надо менять "%i;" ? Или может мы не там ищем?

До этой строки работает своя функция которая объявлена так

int CompConv(unsigned char *c, long size)

Результат этой функции присваивается i4. После замены int на long выходит warning:
pp.c:402: warning: type mismatch with previous implicit declaration
pp.c:291: warning: previous implicit declaration of `CompConv'
pp.c:402: warning: `CompConv' was previously implicitly declared to return `int'

вернули int. Переменная которая присваивается результату этой функции имеет тип long. Что будет если эта переменная будет больше чем int, ведь функция имеет тип int. Почему выходит warning и нужно ли игнорировать его и поставить тип функции long.
...
Рейтинг: 0 / 0
fprintf помогите чайнику
    #33124633
MLeon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
%i -> %li
В предварительном объявлении функции исправить тип в соответствии с определением.
...
Рейтинг: 0 / 0
fprintf помогите чайнику
    #33124693
Tural
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сори. Не понял. В каком это предварительном объявлении? Где это объявление находится?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
int isxobmes()
{
  long i4;
  c =(unsigned char *)malloc( 100 );

  while(fread(c, 1 , 2 ,FILE_INPUT) >  0 )
  {
    i4 = CompConv(c,  2 );                  //строка 291
    fprintf(FILE_OUTPUT, "%li;", i4);
    ...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
int CompConv(unsigned char *c, long size)
{                                                             //строка 402
   long i, k;
   long r= 0 ;
   ...
   return r;
}
...
Рейтинг: 0 / 0
fprintf помогите чайнику
    #33124734
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TuralСори. Не понял. В каком это предварительном объявлении? Где это объявление находится?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
int isxobmes()
{
  long i4;
  c =(unsigned char *)malloc( 100 );

  while(fread(c, 1 , 2 ,FILE_INPUT) >  0 )
  {
    i4 = CompConv(c,  2 );                  //строка 291
    fprintf(FILE_OUTPUT, "%li;", i4);
    ...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
int CompConv(unsigned char *c, long size)
{                                                             //строка 402
   long i, k;
   long r= 0 ;
   ...
   return r;
}



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
int CompConv(unsigned char *c, long size) //Здесь поменяй int на long!!!
{                                                             //строка 402
   long i, k;
   long r= 0 ;
   ...
   return r;
}
...
Рейтинг: 0 / 0
fprintf помогите чайнику
    #33124777
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
long CompConv(unsigned char *c, long size);


int isxobmes()
{
  long i4;
  c =(unsigned char *)malloc( 100 );

  while(fread(c, 1 , 2 ,FILE_INPUT) >  0 )
  {
    i4 = CompConv(c,  2 );                  //строка 291
    fprintf(FILE_OUTPUT, "%li;", i4);
    ...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
long CompConv(unsigned char *c, long size)
{                                                             //строка 402
   long i, k;
   long r= 0 ;
   ...
   return r;
}
...
Рейтинг: 0 / 0
fprintf помогите чайнику
    #33124783
Tural
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав C.
тык warning выходит при замене int на long именно там. А если там оставить int то не выходит.
...
Рейтинг: 0 / 0
fprintf помогите чайнику
    #33125396
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функции использующиеся в разных модулях еще объявляют в заголовочных файлах
"чего-то.h". Шарься по каталогам своей программы и смотри все *.h в одном из них будет запись:
Код: plaintext
1.
int CompConv(unsigned char *c, long size);
Эта же запись может быть и где-то в начале исходника или даже повторена в нескольких исходниках (в *.c или *.cpp). Искать и исправлять все копии.
...
Рейтинг: 0 / 0
fprintf помогите чайнику
    #33128806
Tural
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел MSDN по VC++ и увидел что там тип long и int32 одинакового размера - 4 байта. Я думал лонг 8 байт. Но видимо ошибся. На С под солярис тоже так? Если да то я хочу заменить лонг на 8-и байтовое число. На VC++ это int64. А как на С под солярис? Там я написал вместо long int64 но компилятор выдает ошибку.
pp.c:87: `int64' undeclared (first use in this function)
Как объявить переменную, что бы она была 8-и байтовым целым числом?

Кстати проблема с мусором решена. Проблема была в другом. Но вот теперь осталась проблема, которую я выше описал. Еще тот, кто написал программу сказал, что никакого файла *.h нет. Я тоже смотрел и не нашел. Выше тоже ничего не описано. Странно, почему она выдает такой варнинг?...
...
Рейтинг: 0 / 0
fprintf помогите чайнику
    #33128921
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
int64_t
...
Рейтинг: 0 / 0
fprintf помогите чайнику
    #33128960
Tural
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не получилось
pp.c:87: `int64_t' undeclared (first use in this function)
...
Рейтинг: 0 / 0
fprintf помогите чайнику
    #33128991
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
#include <stdint.h>
...
...
Рейтинг: 0 / 0
fprintf помогите чайнику
    #33129047
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TuralПосмотрел MSDN по VC++ и увидел что там тип long и int32 одинакового размера - 4 байта. Я думал лонг 8 байт. Но видимо ошибся. На С под солярис тоже так? Если да то я хочу заменить лонг на 8-и байтовое число. На VC++ это int64. А как на С под солярис? Там я написал вместо long int64 но компилятор выдает ошибку.
pp.c:87: `int64' undeclared (first use in this function)
Как объявить переменную, что бы она была 8-и байтовым целым числом?

Кстати проблема с мусором решена. Проблема была в другом. Но вот теперь осталась проблема, которую я выше описал. Еще тот, кто написал программу сказал, что никакого файла *.h нет. Я тоже смотрел и не нашел. Выше тоже ничего не описано. Странно, почему она выдает такой варнинг?...
Не знаю про Солярис, но в моем Gentus Linux это так (long = 4 байт);
8 бит предоставляет тип long long...
И вообще, посмотрите для начала файл limits.h (найдите через поиск), там все написано...
...
Рейтинг: 0 / 0
fprintf помогите чайнику
    #33129864
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TuralЕще тот, кто написал программу сказал, что никакого файла *.h нет. Я тоже смотрел и не нашел. Выше тоже ничего не описано. Странно, почему она выдает такой варнинг?...
Есть еще такой момент. Если нету предобъявления функции вообще, то компилятор попытается догадаться как эта функция будет объявлена. Делает он это по первому использованию функции, а когда доходит до собственно объявления и оно не совпадает с предположеным - ругается. "Предположительное" объявление всегда возвращает int, в принципе это может различаться в разных компиляторах, но я иного не встречал. Например такой код 100% даст предупреждение:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
viod foo1() {
  long a;
  a = foo2("12345");
}

long foo2(char *s) {
  return atol(s);
}
Лечится очень просто, добавляешь в начало файла строку
long foo2(char *s);
и все.
...
Рейтинг: 0 / 0
fprintf помогите чайнику
    #33129880
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЛечится очень просто, добавляешь в начало файла строку
long foo2(char *s);
и все.

Я об этом выше уже писал, но не читают

клик
...
Рейтинг: 0 / 0
fprintf помогите чайнику
    #33129906
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗемлекопЯ об этом выше уже писал, но не читают
А ты свой пример прокоментировал? Вооот! :)
...
Рейтинг: 0 / 0
fprintf помогите чайнику
    #33129916
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl ЗемлекопЯ об этом выше уже писал, но не читают
А ты свой пример прокоментировал? Вооот! :)

Да я без претензий на изобретение велосипеда.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / fprintf помогите чайнику
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]