Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как соединить несколько частей слова в одно слово? соединение частей слова 
:(
    Опции темы
alexvs11
Дата 29.6.2012, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: нет
Всего: 10



Код

/* Read chunks of generic data from STREAM.

   This function is a possible cancellation points and therefore not
   marked with __THROW.  */
extern size_t fread (void *__restrict __ptr, size_t __size,
                     size_t __n, FILE *__restrict __stream) __wur;



есть, но видимо компилятор игнорирует атрибут
PM MAIL   Вверх
Bodro
Дата 30.6.2012, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 27.1.2006
Где: Россия, г. Рязань

Репутация: 2
Всего: 4



Цитата(alexvs11 @  29.6.2012,  19:42 Найти цитируемый пост)

зачем такой код может быть нужен?

Вот смотрите - у нас есть файл, который должен себя вести по-разному, в зависимости от некоторых условий, например, работает ли он как в составе библиотеки или как файл в отдельной программе. Когда у вас 1000 строк кода, вы можете написать программу вполне нормально, а когда у вас за 10 лет работы сменилось порядка 20-30 программистов и код у вас занимает 100 000 строк или более, то проще разобраться с конкретной функцией (методом) и переработать её, чем переделывать весь проект, ковыряясь в огромном количестве кода. Общаяя проблема сложных систем в том, что их нельзя понять в полном объёме и можно работать только лишь с какой-то частью. Для этого и существуют куча всяких тонкостей, в том числе и глушение ворниноов. Когда задача выходит за пределы написания конкретного драйвера или конкретной утилиты и превращается или в написание прошивки для устройства (вместе с ОС) или, например, в написание бизнес системы (например, VKernel Capacity Analyser - это просто пример), то разобраться в этой системе становится просто невозможно.

А в простом случае, просто с помощью подобных конструкций можно глушить необрабатываемое значение от функций. К сожалению, не могу вам привести самый наглядный пример с компилятором STM для микропроцессора STi 5100, т.к. его просто нет под рукой - там нужно было или обрабатывать вообще всё или глушить, иначе предупреждения вам просто не дадут понять действительно проблемное место. Но, я надеюсь, что вы мне просто поверите, что есть такие ситуации, когда нужно использовать подобный подход. Все кто мне возразил просто не обладают достаточным опытом напсания кроссплатформенного ПО под разные микропроцессоры, микроконтроллеры, под управлением различных ОС, и не всегда даже что есть ОС. В этом вины, конечно, никого нет. Просто мне не нравится, что люди начинают нападать, не представляя о чём идёт речь. Если вы не понимаете - это ничего страшного. Главное - желание изучать и находить истину! Все мы люди и все мы ошибаемся. Общайтесь с разными программистами. Например, очень много интересно узнаете на оверфлоу, на генту, на ЛОРе, на винграде в разделе кроссплатформенного ПО и программирование под Unix. Ищите истину!

alexvs11 поверьте, такие ситуации встречаются сплошь и рядом. Особенно, когда вам достаётся огромный чужой код. Если бы такой необходимости не было, разработчики библиотек Boost, Qt и прочих не стали бы придумывать подобные механизмы. Просто поверьте. Примеров я вам привёл предостаточно, в одном из них вы сами убедились, что однозначности нет. Изучайте код, пробуйте, смотрите. Старайтесь найти истину, а не упираться в стену и принимать всё в штыки.
PM MAIL WWW ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
volatile
Дата 30.6.2012, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 3
Всего: 85



Цитата(alexvs11 @  29.6.2012,  19:42 Найти цитируемый пост)
есть, но видимо компилятор игнорирует атрибут 

Это ж надо сначала придумать всю эту ахинею, а потом искать ключи компиляции, при которых эта ахинея бы имела хоть какой-то смысл.
У вас, имхо, проблемы с причинно-следственной связью, друзья.
 smile 

Цитата(Bodro @  29.6.2012,  16:29 Найти цитируемый пост)
Вы тут где-то видите неиспользуемые переменные или возвращаемое функцией значение? Вы совсем не понимаете о чём мы говорим?

Оператор присваивания возвращает значение, которое мы не используем.
Оператор присваивания - это тоже функция.
обычное:
Код

a = b;
равносильно:
Код

a.operator= (b);

operator= в языке С++ возвращает значение, которое мы в данном случае не используем. 

На весь остальной бред отвечать ни сил, ни желания нет, сорри.
Есть faq для новичков, поищите по форуму, там все есть.

PM MAIL   Вверх
Bodro
Дата 30.6.2012, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 27.1.2006
Где: Россия, г. Рязань

Репутация: 2
Всего: 4



Вам сколько лет, простите узнать? И какой у вас опыт программирования? вообще, вы чем занимаетесь? Просто, может смысле не имеет с вами общаться?

UPD
Надоело! От ваших оскорблений я устал! Думайте что хотите! Хотите что б я сказал что я не прав? Пожалуйта! Профессионалы, кто прочитает данный топик всё поймут. А перед вами распинаться я больше не хочу. alexvs11 запускает код, адекватно комментирует, интересуется. А вы ведёте себя как тупой баран, котрый упёрся рогами в стену и совершенно не слушает что ему говрят! Я признАю свою неправоту, если вы докажете что за 15 лет моей работы всё что написал и видел было мифом! Что для вас не авторитет никто - я понимаю! Вы не написали ни строчки кода, не сделали ничего, чтобы хоть как-то опровергнуть! Вы ТРОЛЬ! А я тупой осёл, кто повёлся на вас! И воноват на 100% я!!! Сколько раз зарекался с холиварщиками не общаться и опять повёлся! Доказать что-то тупому барану просто нереально, к тому же если этот баран ничего не возражает, а только льёт ###!

Добавлено @ 00:16
Самы поганый топик, судя по всему! Среди русскоязычных форумов, винград был не на последнем месте, но вы его обосрали до предела! Хоть бы одно доказательство! Троль и холиварщик!

Добавлено через 11 минут и 20 секунд
Цитата(volatile @  30.6.2012,  00:01 Найти цитируемый пост)
Оператор присваивания возвращает значение, которое мы не используем.

УЧИ МАТЧАСТЬ!!!

Добавлено через 14 минут и 34 секунды
Цитата(volatile @  30.6.2012,  00:01 Найти цитируемый пост)
Оператор присваивания - это тоже функция.

Почитай про перегрузку!!! УЧИ МАТЧАСТЬ И ДУМАЙ ГОЛОВОЙ!!!

Это сообщение отредактировал(а) Bodro - 30.6.2012, 00:17
PM MAIL WWW ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Bodro
Дата 30.6.2012, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 27.1.2006
Где: Россия, г. Рязань

Репутация: 2
Всего: 4



Цитата(volatile @  30.6.2012,  00:01 Найти цитируемый пост)
Есть faq для новичков, поищите по форуму, там все есть.

smile Спасибо, загляну как-нить!

Добавлено через 1 минуту и 18 секунд
Но для начала, изуче calloc и libc, а потом говорите про перегрузку. Вспомните чушь, которую вы несли в начале нашего разговора! ВСЁ!
PM MAIL WWW ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
volatile
Дата 30.6.2012, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 3
Всего: 85



Цитата(Bodro @  30.6.2012,  00:06 Найти цитируемый пост)
От ваших оскорблений я устал! 

Так я вас оскорблять еще и не начинал даже
Цитата(Bodro @  30.6.2012,  00:06 Найти цитируемый пост)
А вы ведёте себя как тупой баран

Хотите? smile 
PM MAIL   Вверх
xvr
Дата 1.7.2012, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Господа, остыньте немного. Не стоит обвинять Bodro в наведении тени на плетень и написании бреда. По существу он абсолютно прав! 
Проблема в том, что написание действительно кросс платформенного кода вещь весьма трудоемкая. Размер текста действительно сильно возрастает. С другой стороны действительно кросс платформенный код требуется очень редко, поэтому обычно ограничиваются определенным набором платформ и компиляторов, и делают код, который бы успешно компилировался на них.
Невозможно охватить все на свете, поэтому вопрос в том, что мы пытаемся охватить нужно ставить явно. 
Исходный вопрос был про Билдер, так что в данном случае вопрос о кросс платформенности явно не стоял, и (void) перед printf явный оверкил (Билдер этого не требует, а перенести программу с Билдера на другой компилятор невозможно по причине сильного отличия его диалекта С++ от всех остальных).

Кстати, по поводу ругани gcc на игнорирование результата от fread. Это не является встроенной реакцией gcc на игнорирование возвращаемого значения, а является явно затребованной (с помощью прагмы) реакцией от разработчика libc

Еще кстати, есть уж очень нестандартные компиляторы С, у которых например размер char'а - 2 байта (хотя sizeof(char) и у них 1), вполне понятно, что кросс платформенные программы на таком компиляторе скорее всего не заработают, какими бы они хорошими не были


PM MAIL   Вверх
volatile
Дата 1.7.2012, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 3
Всего: 85



Цитата(xvr @  1.7.2012,  19:09 Найти цитируемый пост)
написание действительно кросс платформенного кода

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

вопрос.
Код

#include <iostream>
int main ()
{
   std::cout << "hello world" << std::endl;
}

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




Это сообщение отредактировал(а) volatile - 1.7.2012, 23:31
PM MAIL   Вверх
xvr
Дата 2.7.2012, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(volatile @  1.7.2012,  23:25 Найти цитируемый пост)
Является ли данный код кроссплатформенным ?

С точки зрения стандарта - является. Дальнейшее зависит от того, какими именно компиляторами мы собираемся это компилить. Некоторые могут потребовать return 0; в конце main
Некоторые (старые) могут потребовать #include <iostream.h>, ну и т.д и т.п.
Некоторые компиляторы вообще могут С++ не поддерживать  smile 
Не бывает вообще кроссплатформенного кода.

PM MAIL   Вверх
volatile
Дата 2.7.2012, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 3
Всего: 85



Цитата(xvr @  2.7.2012,  09:51 Найти цитируемый пост)
Некоторые могут потребовать return 0; в конце main
Некоторые (старые) могут потребовать #include <iostream.h>, ну и т.д и т.п.

ну это ладно, а почему вы не перечеслили главное, из-за чего здесь собственно сыр-бор?
  std::cout << "hello world" << std::endl;
возвращает значение (ссылку на объект std::ostream), которое не исползьзуется.

другими словами, если вы считаете что printf(...); некроссплатформенно, а (void) printf(...) кроссплатформенно
вам нужно признать и следующее
std::cout << "hello world" << std::endl; НЕкроссплатформенно
(void) (std::cout << "hello world" << std::endl); Кроссплатформенно

и вопрос вы где-нибудь когда-нибудь видели подобную, по вашему-кросплатформенную, конструкцию:
(void) (std::cout << ****);
я нигде и никогда не выдел. Специально даже поискал щас в гугле - ничего!

Вы действительно считаете что (void) (std::cout << ****); это кроссплатформенный код?


Это сообщение отредактировал(а) volatile - 2.7.2012, 23:41
PM MAIL   Вверх
artsb
Дата 3.7.2012, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



volatile, я так понял, что речь идёт не совсем о кросплатформенности. Уже писали, что добиться поддержки всех компиляторов не получится. Поэтому, в данном случае, Bodro просто хочет, чтобы его WarningList был пустым во всех компиляторах, которые он использует. Я, кстати, тоже люблю, чтобы было чисто smile

Так что, вы просто развели тут холивар на ровном месте...

Это сообщение отредактировал(а) artsb - 3.7.2012, 09:35


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
xvr
Дата 3.7.2012, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(volatile @  2.7.2012,  23:26 Найти цитируемый пост)
другими словами, если вы считаете что printf(...); некроссплатформенно, а (void) printf(...) кроссплатформенно

Не считаю. Запись (void)printf(...) в последний раз видел во времена K&R C. Потом оно как то рассосалось  smile 
В настоящее время мне не известно ни одного компилятора, который бы по своей инициативе ругался на неиспользуемое возвращаемое функцией значение (а уж тем более С++ компилятор)

В настоящее время записи типа (void) func(...) или sizeof(char) используются в основном не для компилятора, а для программиста, в качестве явного указания намерений автора

PS. (void) перед printf на мой взгляд - overkill, но тем не менее вполне допустимая конструкция. Со смыслом может быть использована в обучающих целях - показать, что printf таки возвращает значение (которое мы не используем)

PPS. Конструкцию
Код

int main(int argc, char** argv)
{
    (void) argc;
    (void) argv;
 ...
}
лучше заменить на
Код

int main(int, char**)
{
 ...
}
или вообще на
Код

int main()
{
 ...
}
 - это более переносимо (да и более привычно)

Добавлено через 1 минуту и 21 секунду
Цитата(artsb @  3.7.2012,  09:33 Найти цитируемый пост)
Поэтому, в данном случае, Bodro просто хочет, чтобы его WarningList был пустым во всех компиляторах, которые он использует. 

Точно!

PM MAIL   Вверх
volatile
Дата 4.7.2012, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 3
Всего: 85



Цитата(artsb @  3.7.2012,  09:33 Найти цитируемый пост)
я так понял, что речь идёт не совсем о кросплатформенности

Да нет автор утверждал именно об настоящеей кроссплатформенности.

Цитата(artsb @  3.7.2012,  09:33 Найти цитируемый пост)
хочет, чтобы его WarningList был пустым во всех компиляторах, которые он использует.

Ну вот это ближе к истине. 
А использует он, компилятор для узкоспециализированного микроконроллера STi 5100, для тюнера (посмотрел не поленился).
Просто автор утверждал что именно так нужно писать всегда и везде. 

Есть много экзотическиских компиляторов, и ставить критерием кроссплатформенности,
какой-то левый компилятор для конроллера кофемолки или стиральной машины - нонсенс.

Цитата(volatile @  24.6.2012,  00:35 Найти цитируемый пост)
Меня просто раздразило излишнее многословие в коде.  (выдаваемое за кроссплатформенность)


Короче чтоб закрыть тему, предлагаю свой вариант.
вот эту функцию
Цитата(Bodro @  21.6.2012,  16:20 Найти цитируемый пост)
void func6(const char& x1, const char& x2, const char& x3)
{
    char* res = NULL; // В C++ лучше указывать 0 вместо NULL

    if(res = (char*) calloc(4, sizeof(char)))
    {
        *(res + 0) = x1;
        *(res + 1) = x2;
        *(res + 2) = x3;

        (void) printf("%s\n", res);

        free(res);
    }
    else
    {
        (void) printf("Ошибка при выделении памяти!\n");
    }
}

я бы написал так:
Код

void func (char x1, char x2, char x3)
{
   putchar (x1); 
   putchar (x2); 
   putchar (x3);
}


удачи всем!  smile 


Это сообщение отредактировал(а) volatile - 4.7.2012, 01:37
PM MAIL   Вверх
volatile
Дата 4.7.2012, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 3
Всего: 85



Кстати говоря, 
Оказывается, этот охрененно кроссплатформенный код (так всем ужасно понравившийся)
вообще не компилируется на нормальном С компиляторе
ни здесь:
http://codepad.org/PauSSnZ5
ни здесь:
http://liveworkspace.org/code/54a261066030...e3cf2b1494edd74
 smile


Цитата(Bodro @  26.6.2012,  12:38 Найти цитируемый пост)
я написал кроссплатформенный абсолютно рабочий код

да, да, абсолютно! 

PM MAIL   Вверх
alexvs11
Дата 4.7.2012, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: нет
Всего: 10



volatile, так ето же не с++
PM MAIL   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1265 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.