Поиск:

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


Шустрый
*


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

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



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

Если вы не видели ничего кроме Builder, Visual Studio и Windows, то лучше бы не вмешивались в те вещи, которые не понимаете. Любая критика должна быть обоснована. А вы просто плюнули пост, засрали и всё! И ни доказательств, ни примеров "более правильной", по вашему мнению, реализации. Ничего - пустота и болтовня!

К тому же я от вас, кроме засирания, пока не увидел ни одной строчки кода (ни от одного ни от другого). В первых постах люди писали код, затем я написал кроссплатформенный абсолютно рабочий код - большое количество примеров. А от вас, кроме бестолковой критики, ничего не последовало. Хотите поболтать - пишите мне в личку - форум не надо засорять мусором и флеймом. В личке, если хотите и если у меня будет время на вас, я покажу код, реально используемый в ядре Linux, в оборудовании CISCO, в браузере Oregan, в ядре операционной системы STM OS20, в некоторых "хакерских" утилитах и бэкдорах, а так же в некоторых прикладных программах, реально используемых на платформах Linux и Windows.

Вы, ребята, похоже что, тролли или холиварщики. Напиши парочку примерчиков и представь их, а троллить - много ума не надо! Надоела мне вся эта чушь! Код не пишите, а только тролите! Желаю удачи!


Модератор, да закрой ты тему! А то начнётся сейчас тут война. Парень (Dreamuchiy) уже получил огромное количество ответов на вопрос. Думаю, он и сам за 4 года уже нашёл ответ на свой вопрос.
PM MAIL WWW ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
volatile
Дата 27.6.2012, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Bodro @  26.6.2012,  12:38 Найти цитируемый пост)
лучше бы не вмешивались в те вещи, которые не понимаете.

На пол тона ниже...
Переход на обуждение личностей - первый признак тролля.

Цитата(Bodro @  26.6.2012,  12:38 Найти цитируемый пост)
Вы, ребята, похоже что, тролли

С точностью до наоборот. Напомню, вашу личность здесь никто не обсуждал.
smile 

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


hell is here
**


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

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



Цитата(Bodro @  23.6.2012,  16:15 Найти цитируемый пост)
/* Функция подавления неиспользуемого значения типа int */inline void suppress_unused_return(int unused) {}/* Пример использования */suppress_unused_return(printf("%s\n", res));


#define UNUSED(x) ((void)(x))
не?
PM MAIL   Вверх
Bodro
Дата 27.6.2012, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(alexvs11 @  27.6.2012,  01:28 Найти цитируемый пост)
#define UNUSED(x) ((void)(x))
не? 

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

Ладно, может просто кто не понимает суть подавляющей функции. Объясню.
В стандарте C99 и в C++ есть так называемые встраиваемые функции - ключевое слово inline. Код данной функции подставляется непосредственно в место вызова (это все знают - просто напоминаю). Таким образом, код функции
Код

inline void suppress_unused_return(int unused) {}

подставится в место её вызова, а, поскольку, она пустая, то ничего подставляться не будет. Таким образом, она никаким образом результирующий код не изменит, но позволит компилятору понять, что мы значение, которые передаём ей, собираемся использовать. Можно использовать template для подавления любых типов, а не конкретно int (только C++). Внутри переменную unused можно давить средствами прагм, обычным (void) и т.п. Но давить придётся в одном месте, а не в тысячи. Даже если ваш компилятор выкинет ворнинг, он его выкинет только в одном месте и для данного компилятора конкретно это место можно заглушить прагмами. Вариаций написания подобных функций много - проявите фантазию. Я представил лишь пример, отражающий саму суть.

Для тех кто по-прежнему продолжает считать что это "дурацкая конструкция" - пусть скажут это Trolltech и Nokia:
Код

/*************************
   Файл QtCore/qglobal.h.
*************************/

/*
   Avoid "unused parameter" warnings
*/

#if defined(Q_CC_INTEL) && !defined(Q_OS_WIN) || defined(Q_CC_RVCT)
template <typename T>
inline void qUnused(T &x) { (void)x; }
#  define Q_UNUSED(x) qUnused(x);
#else
#  define Q_UNUSED(x) (void)x;
#endif


Простите за грубость, но учите матчасть!  smile  Вопросы по поводу "дурацких конструкций" или по поводу ещё чего-то остались? Задавайте - с удовольствием отвечу, раз пошла такая пьянка. И впредь, прежде чем сказать что что-то "дурацкое", "тупое", "дебильное", "ламерское", "так только тупой мог сделать" и прочее (это относится не только к данному топику) задумайтесь - может это просто вы неправы? smile


smile smile smile Я всего лишь написал 8 функций рабочего кроссплатформенного кода на скорую руку, чтобы просто показать что сконкатеновать строки и символы очень просто. Я даже не мог предположить что это приведёт к подобным спорам. smile


UPD
Вот сюда ещё взгляните - ещё один интересный вариант подавления: http://www.boost.org/doc/libs/1_49_0/boost...port/unused.hpp

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


hell is here
**


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

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



Цитата(Bodro @  27.6.2012,  15:08 Найти цитируемый пост)
Простите за грубость, но учите матчасть!    Вопросы по поводу "дурацких конструкций" или по поводу ещё чего-то остались? Задавайте - с удовольствием отвечу, раз пошла такая пьянка. И впредь, прежде чем сказать что что-то "дурацкое", "тупое", "дебильное", "ламерское", "так только тупой мог сделать" и прочее (это относится не только к данному топику) задумайтесь - может это просто вы неправы? 

согласен, видимо в этом есть смысл
просто учитывайт, что когда ты разговариваешь с собеседником как с ребенком (эти длинные телеги текста и рассказы про свой недюжий профессионализм), то ожидай такого же отношения и к себе
PM MAIL   Вверх
Bodro
Дата 27.6.2012, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вообще-то, я просто написал программу и всё! Надо было просто её собрать и проверить работоспособность. Вместо этого люди стали показывать свой "профессионализм" и писать комментарии, ища в коде погрешности. На что и получили, собственно, телеги, где приходилось объяснять всё как ребёнку. Люди-то не спрашивали, а писал то что в коде они увидели "ошибки", а потом и вовсе дошло до "дурацких конструкций". Конструктивный диалог никто не вёл. Если что-то в моём коде показалось непонятным и странным - можно же было просто спросить? К чему все вот эти фразы?

Цитата

Излишняя тщательность (граничащая с параноей),
И одновременно халатность, там где инициализация просто необходима.

Меня просто раздразило излишнее многословие в вашем коде.  (выдаваемое за кроссплатформенность)

Это же надо было такую дурацкую конструкцию придумать.

а вот calloc(4, sizeof(char)) выделение 4 байтов памяти это вообще пипец. 



Цитата(alexvs11 @  27.6.2012,  16:15 Найти цитируемый пост)
то ожидай такого же отношения и к себе

Почему такого-же? Я не увидел в ответах рассказов про недюженый профессионализм, телеги кода, ссылок на примеры и подробных комментариев. Я объяснял всё тщательно и подробно, со стороны же оппонентов такого не было.

Предлагаю закончить весь разговор миром. Если кого обидел - прошу прощения! Я серьёзно! Просто давайте как-то более вежлевее, терпеливее и профессиональнее относиться друг к другу.


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


Эксперт
****


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

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



Цитата(Bodro @  27.6.2012,  15:08 Найти цитируемый пост)
Для тех кто по-прежнему продолжает считать что это "дурацкая конструкция" - пусть скажут это Trolltech и Nokia:

Макрос Q_UNUSED позволяет избежать предупреждений по поводу неиспользования какой-то переменной (чаще всего аргументов).
А вовсе не для функций возвращающих значение, которое мы не используем.
Цитата

(void) printf (...);

Да я встерчал в паре-другой проектов такие конструкции, и считаю это абсолютно ненужным загромождением кода.
К тому же это непоследовательное решение. Раз уж идти этим параноидальным методом, то нужно идти до конца.
И приводить к void, везде где не исползуется значение. А поскольку язык С/С++ состоит практически на 90% из выражений, то 
к (void) нужно приводить практически каждую строку.
например:
Цитата

void func6(const char& x1, const char& x2, const char& x3)
{
    char * res = NULL; // В C++ лучше указывать 0 вместо NULL
    if(res = (char*) calloc(4, sizeof(char)))
    {
        (void) (*(res + 0) = x1);
        (void) (*(res + 1) = x2);
        (void) (*(res + 2) = x3);
        (void) printf("%s\n", res);
        ...

Кстати, это абсолютно правильный, рабочий и кроссплатформенный код.  smile
но умный ли, это вопрос...

Цитата(Bodro @  27.6.2012,  15:08 Найти цитируемый пост)
Trolltech и Nokia:

Кроме того, ссылки на Trolltech и Nokia не совсем уместны (тем более в разделе дебилдера)
Достаточно будет одной ссылки на стандарт.
Буду признателен если вы укажете место, где говорится что приводить к (void) неиспользуемое значение функций - есть жизненная необходимость.


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


hell is here
**


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

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



Цитата(volatile @  28.6.2012,  00:17 Найти цитируемый пост)
Макрос Q_UNUSED позволяет избежать предупреждений по поводу неиспользования какой-то переменной (чаще всего аргументов).А вовсе не для функций возвращающих значение, которое мы не используем.

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


Эксперт
****


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

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



Цитата(alexvs11 @  28.6.2012,  00:20 Найти цитируемый пост)
полагаю подразумеваются радикальные ключи компиляции 

Безусловно, есть такие ключи. Но их подобрать, нужно еще очень постараться.
И это действительно радикальные ключи, используемые в особо параноидальных случаях.




Это сообщение отредактировал(а) volatile - 28.6.2012, 00:40
PM MAIL   Вверх
Bodro
Дата 29.6.2012, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



*** 1 - "ПАРАНОИДАЛЬНЫЕ КЛЮЧИ КОМПИЛЯЦИИ, КОТОРЫЕ НИКТО И НИКОГДА НЕ ИСПОЛЬЗУЕТ" ***
Цитата(volatile @  28.6.2012,  00:38 Найти цитируемый пост)
Безусловно, есть такие ключи. Но их подобрать, нужно еще очень постараться.
И это действительно радикальные ключи, используемые в особо параноидальных случаях.

Информация об используемых компиляторах:
Код

bodro@bodro:~/workspace/develop/t/void$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3                                                                                                                                                                                                     
Copyright (C) 2011 Free Software Foundation, Inc.
Это свободно распространяемое программное обеспечение. Условия копирования
приведены в исходных текстах. Без гарантии каких-либо качеств, включая 
коммерческую ценность и применимость для каких-либо целей.

bodro@bodro:~/workspace/develop/t/void$ g++ --version
g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
Это свободно распространяемое программное обеспечение. Условия копирования
приведены в исходных текстах. Без гарантии каких-либо качеств, включая 
коммерческую ценность и применимость для каких-либо целей.

bodro@bodro:~/workspace/develop/t/void$

Код из libc:
Код

/* Файл stdio.h */

/* Read chunks of generic data from STREAM.

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

Проверочный код:
Код

#include <stdio.h>

void f(void) {
    fread(NULL, 1, 1, stdin);
}

Результат работы:
Код

bodro@bodro:~/workspace/develop/t/void$ gcc test.c -c -O3
test.c: В функции «f»:
test.c:4:7: предупреждение: ignoring return value of «fread», declared with attribute warn_unused_result [-Wunused-result]
bodro@bodro:~/workspace/develop/t/void$ g++ test.c -c -O3
test.c: В функции «void f()»:
test.c:4:34: предупреждение: ignoring return value of «size_t fread(void*, size_t, size_t, FILE*)», declared with attribute warn_unused_result [-Wunused-result]
bodro@bodro:~/workspace/develop/t/void$


В строке $ gcc test.c -c -O3 есть что-то параноидальное, сложное или крайне-редко используемое?

*** 2 - "САГА ОБ АБСОЛЮТНОМ ЗНАНИИ ЯЗЫКА СИ И C++ ИЛИ АБСОЛЮТНО ПРАВИЛЬНЫЙ, РАБОЧИЙ И КРОССПЛАТФОРМЕННЫЙ КОД" ***
Цитата(volatile @  28.6.2012,  00:17 Найти цитируемый пост)
(void) (*(res + 0) = x1);

Вы тут где-то видите неиспользуемые переменные или возвращаемое функцией значение? Вы совсем не понимаете о чём мы говорим?

*** 3 - МЫ УМНЕЕ ВСЕХ ИЛИ QT И BOOST ДЛЯ НАС НЕ АВТОРИТЕТ ***
Очень странно что Boost и Qt для вас не являются авторитетом. Это библиотеки, которые используются во всём мире в огромном количестве программ и прекрасно себя зарекомендовали как мощнейшие кроссплатформенные библиотеки. Если вы их не считаете за хороший пример написания кода, то это как бы наводит на мысль о вашей квалификации. Qt и Boost отлично используются в Билдере.

*** 4 - НАДО ЖЕ БЫЛО ВЫДУМАТЬ ТАКУЮ ДУРАЦКУЮ КОНСТРУКЦИЮ ***
Информация о компиляторе Intel:
Код

bodro@bodro:~/workspace/develop/t/void$ /opt/intel/bin/icc --version
icc (ICC) 12.1.3 20120212
Copyright (C) 1985-2012 Intel Corporation.  All rights reserved.

bodro@bodro:~/workspace/develop/t/void$ 

Тестируемый код:
Код

void f(void) {
    int var_void;
    (void) var_void; // А вот тут почему-то всё-равно предупреждение (icc)!
}

Результат для компилятора Intel под Linux:
Код

bodro@bodro:~/workspace/develop/t/void$ /opt/intel/bin/icc test.c 
test.c(3): warning #592: variable "var_void" is used before its value is set
        (void) var_void; // А вот тут почему-то всё-равно предупреждение!
               ^

А вот gcc обрабатывает такие ситуации отлично (даже при всевозможных опциях предупреждений):
Код

bodro@bodro:~/workspace/develop/t/void$ ls
test.c
bodro@bodro:~/workspace/develop/t/void$ gcc test.c -c -Wall -Wextra -O3
bodro@bodro:~/workspace/develop/t/void$ ls
test.c  test.o
bodro@bodro:~/workspace/develop/t/void$

Как видим, одного лишь (void) бывает недостаточно.

*** 5 - ВЕК ЖИВИ - ВЕК УЧИСЬ ИЛИ РАССКАЗ О ТОМ КАК Я СЛАЖАЛ ***
На счёт функции подавления признаю - недолядел - представил не совсем универсальный способ. На самом деле всё гораздо строже. Данный механизм мы используем редко (в основном уже готовые макросы или функцию в том виде, в котром я её вам описал) от этого и недоглядел. Так вот - суть в ссылке, т.е. когда мы пишем (void) variable;, то некоторые компиляторы считают что мы пытаемся использовать неинициализированную переменную и ругаются на это (если переменная действительно неинициализировалась). Функция подавления в том виде, в котором я её описал первоначально, положительного результата в этом случае не даст, потому что мы в неё пытаемся передать значение неинициализированной переменной. Как раз тут-то и нужна ссылка! Таким образом компилятор будет понимать что, возможно, мы переменную проинициализируем внутри функции.
Код

inline unused(int& v){};

void f(void) {
  int variable;
  unused(variable);
}

Это что касается C++. Теперь, если мы хотим написать код на Си и нам, возможно, придётся компилировать его на компиляторе C++. Т.е. нам нужно создать какой-то способ подавления предупреждений о неиспользуемых переменных как на компиляторах C, так и на компиляторах C++. Тут возникает некоторая загвоздка! Ссылок-то у нас нет, а конструкция с (void) не всегда работает (пример - учебный компилятор Comeau или, например, компилятор Intel - раз есть два, значит есть и другие). Тут придётся шаманить:
Код

inline void unused(int* v){}

void f(void) {
  int t;
  unused(&t);
}

Вообще, выглядит страшно и совместимо только со стандартом C99 и C++, т.к. содержит inline. Скажем так, я не нашёл оптимального универсального способа глушить предупредения компилятора о неиспользуемых переменных. Есть способ, применяемый на компиляторах C++, есть способ (см.выше), применимый на компиляторах C99 и C++. Можно придумать способ и для C89, но он не очень хороший (вызов call и ret).
Код

void unused(int* v){}

Ну и опять таки, придётся передавать не само значение переменной, а её адрес.

Для тех, кто считает что я загоняюсь, хочу сказать, что реальные задачи именно такие - откройте GNU-код и увидите. Ещё примеры - протокол RTSP от CISCO, браузер Oregan от Oregan Networks, TCP/IP стек протоколов NexGen, код операционной системы STM OS20, ПО IPTV приставки IP-STB ICxSTB500-01, веб-интерфейс некоторых прошивок оборудования D-Link и др. Мне всегда хватало того что есть в Boost и Qt. Для более простых случаев я писал собственные глушилки или использовал (void), когда этого было достаточно. Но сейчас специально порылся и увидел, что всё-таки есть компиляторы, на которых даже тех вариантов, которые я представил (которые обосрал volatile и некоторые другие участники) оказывается недостаточно. В моей практике они не встречались.
У всех, кто удивился моим конструкицям и способам глушения ворнингов хочу спросить - вы хоть пытались гуглить проблему??? Для себя я нашёл способы глушения, но, как я сегодня узнал, что даже такие варианты не всегда помогают. Прежде чем засрать - вы бы почитали хоть Интернет!

*** 6 - ПО-СТАНДАРТУ, В ТУШЁНКЕ ДОЛЖНО БЫТЬ МЯСО ***
Цитата(volatile @  28.6.2012,  00:17 Найти цитируемый пост)
Достаточно будет одной ссылки на стандарт.
Буду признателен если вы укажете место, где говорится что приводить к (void) неиспользуемое значение функций - есть жизненная необходимость.

Да причём тут стандарт??? Никому не интересен стандарт! Задача же не написать тупорыло код по стандарту, а задача сделать так чтобы он работал практически на любых компиляторах. Вот о чём разговор-то идёт.
У каждого компилятора есть свои расширения, свои опции, свои особенности, свои ошибки в конце-концов! Какое нам дело до стандарта, если написанный нами код не собрался под используемый нами компилятор???

*** 7 - ВЕСЬ РАЗГОВОР НЕ ПО ТЕМЕ ***
Да, спор наш и правда абсолютно не по теме. Тема конкретная - Билдер. Человек задал вопрос - я просто написал несколько примеров, которые в том числе работаю на Билдере. На этом можно было б остановиться, если бы не volatile, который решил показать что он не знает функции calloc, но зато точно знает как можно обосрать то, что он не сделал. Ну а дальше пошло-поехало. Я предлагал много раз закрыть тему, но каждый раз кто-то что-нибудь неприятное да напишет!

В заключении хочу сказать. Я тут собрал всё в кучу и различные платформы и компиляторы, и языки С и C++. Много что. Но суть-то не в этом. Изначально я получил претензии в свой адрес что я написал очень неправильный, кривой, неработающий, праноидальный (и т.д.) код. И что я всё это выдаю за кроссплатформенность. Что в том что я написал нет никакой необходимости и это полный бред. Данный трактат написан для того, чтобы прочитав его и попробовав примеры, которые я указал, вы задумались, что стоит ли нападать на человека, который просто решил помочь другому и предложил несколько вариантов кода. Зачем нападать и тем более критиковать, когда у вас недостаточно опыта и знаний на критику? Господа, я призываю вас - впредь не нападайте ни на новичков ни на спецов - только себя выставляете в дурном свете! Прекратите же все свои нападки на мой код! Если есть что сказать, то сначала напишите хоть какие-нибудь примеры, касающиеся данного топика, а потом уже критикуйте (только очень прошу - подтверждайте свою критику фактами, стандартами, документацией, примерами кода, ссылками на авторитетные источники, личный опыт и т.п.).

Обращаюсь к автору темы и к модератору - закройте тему! Холивар чистый воды! Прошу прощения, что я его поддерживаю, просто не люблю необоснованные нападки на меня.


volatile, если вы не знаете, то зачем же пишете? Чего вы добиваетесь от этого спора? (ответ в личные сообщения)
PM MAIL WWW ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
alexvs11
Дата 29.6.2012, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


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

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



Цитата(Bodro @  29.6.2012,  16:29 Найти цитируемый пост)
В строке $ gcc test.c -c -O3 есть что-то параноидальное, сложное или крайне-редко используемое?

фантастичное чтото есть, какая версия gcc?

Код

@:~/c++> echo '#include <stdio.h>

void f(void) {
    fread(NULL, 1, 1, stdin);
}

int main() {
    f();
    return 0;
}' > test.c
@:~/c++> gcc test.c -c -O3
@:~/c++> 




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


Шустрый
*


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

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



Я так понимаю, весь текст вы не читали.

Цитата(Bodro @  29.6.2012,  16:29 Найти цитируемый пост)
Информация об используемых компиляторах:
Код

bodro@bodro:~/workspace/develop/t/void$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3                                                                                                                                                                                                     
Copyright (C) 2011 Free Software Foundation, Inc.
Это свободно распространяемое программное обеспечение. Условия копирования
приведены в исходных текстах. Без гарантии каких-либо качеств, включая 
коммерческую ценность и применимость для каких-либо целей.
bodro@bodro:~/workspace/develop/t/void$ g++ --version
g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
Это свободно распространяемое программное обеспечение. Условия копирования
приведены в исходных текстах. Без гарантии каких-либо качеств, включая 
коммерческую ценность и применимость для каких-либо целей.
bodro@bodro:~/workspace/develop/t/void$
    


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


Шустрый
*


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

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



А у вас что за версия libc и что за версия gcc? Или хотяб что за операционка?

Мне нужно:
$ uname -a
$ gcc --version
$ ldd --version
$ lsb_release -a

Если что-то не заработает - скажите.

UPD
Кстати, функцию main могли бы не писать - мы ведь собираем с ключом -c. Правда, на предупреждение это никак не влияет вовсе.

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


hell is here
**


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

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



у меня 4.3.4 
опять же тут два очевидных решения:
1) писать нормальный код и честно проверять возвращаемое значение
2) использовать -Wunused-result, хотя лично на моей версии он даже такого ключа не знает
Цитата(Bodro @  29.6.2012,  17:31 Найти цитируемый пост)
Кстати, функцию main могли бы не писать - мы ведь собираем с ключом -c. Правда, на предупреждение это никак не влияет вовсе.

догадываюсь

Добавлено через 2 минуты и 16 секунд
Цитата(Bodro @  29.6.2012,  16:29 Найти цитируемый пост)
void f(void) {    int var_void;    (void) var_void; // А вот тут почему-то всё-равно предупреждение (icc)!}

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

Добавлено через 3 минуты и 18 секунд
Цитата(Bodro @  29.6.2012,  16:29 Найти цитируемый пост)
На счёт функции подавления признаю - недолядел - представил не совсем универсальный способ. На самом деле всё гораздо строже. Данный механизм мы используем редко (в основном уже готовые макросы или функцию в том виде, в котром я её вам описал) от этого и недоглядел. Так вот - суть в ссылке, т.е. когда мы пишем (void) variable;, то некоторые компиляторы считают что мы пытаемся использовать неинициализированную переменную и ругаются на это (если переменная действительно неинициализировалась). Функция подавления в том виде, в котором я её описал первоначально, положительного результата в этом случае не даст, потому что мы в неё пытаемся передать значение неинициализированной переменной. Как раз тут-то и нужна ссылка! Таким образом компилятор будет понимать что, возможно, мы переменную проинициализируем внутри функции.

это к предыдущему вопросу

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


Шустрый
*


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

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



Ну тогда уж не -Wunused-result, а наоборот: -Wno-unused-result. -Wunused-result указан по-умолчанию.

А на счёт нормального кода - согласен - проверять возвращаемое значение нужно, но согласитесь, вы же не всегда его проверяете и не всегда оно вам действительно нужно. Порой возвращаемое значение можно проигнорировать. Но при переносе на другую платформу могут возникнуть ненужные ворнинги, а если, в случае с gcc, вы так же укажите -Werror, то код просто не соберётся.

Так что, как сами видите, однозначностей тут нет. Я надеюсь, вы то хоть со мной согласитесь?

Кстати, вы посмотрите на stdio.h на функцию fread. У неё в конце указано что-то вроде __wur или __attribute_warn_unused_result__?
PM MAIL WWW ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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