The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Продемонстрирован код, который по мнению SCO был скопирован ..., opennews (ok), 12-Июл-10, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


19. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от spanasikemail (ok), 12-Июл-10, 12:07 
Надеюсь, что нисколько.

Должно быть int i = 0;

Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

40. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от Andrew Kolchoogin (?), 12-Июл-10, 13:00 
Нет, не должно.

Таким образом вы экономите один store на каждый вызов функции. В случае, если это interrupt handler, экономия получается некислая. ;)

"Бездумная" инициализация автоматических переменных свидетельствует о непонимании того, как они обрабатываются.

Ответить | Правка | Наверх | Cообщить модератору

42. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от spanasikemail (ok), 12-Июл-10, 13:08 
>Нет, не должно.

Должно. Из-за этого столько багов, что лучше обнулять.

> свидетельствует о непонимании того

а, ну да, конечно. видимо, вы самый большой специалист.

вопрос: вот код
int i;
чему равна i в месте, где эта i используется в первый раз ?

ответ - неизвестно.

Ответить | Правка | Наверх | Cообщить модератору

44. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от Аноним (-), 12-Июл-10, 13:24 
Простите, но у вас какие-то дилетантские познания программирования на С. Вы ещё думаю удивитесь когда узнаете сколько в ядре goto. В месте где используется i  первый раз может быть все равно какое у неё значение, потому что использовать i можно первый раз на запись.
Ответить | Правка | Наверх | Cообщить модератору

48. "Продемонстрирован код, который по мнению SCO был скопирован ..."  –2 +/
Сообщение от spanasikemail (ok), 12-Июл-10, 13:32 
простите, уж какие есть :-)
"может быть", "может" - это не те слова, которые следует использовать при разработке надёжного ПО.

Ответить | Правка | Наверх | Cообщить модератору

60. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +2 +/
Сообщение от szh (ok), 12-Июл-10, 14:14 
вы использовали подмену понятий, разберитесь со смыслом выражения "может быть" в верхнем посте.
Ответить | Правка | Наверх | Cообщить модератору

108. "Продемонстрирован код, который по мнению SCO был скопирован ..."  –1 +/
Сообщение от spanasikemail (ok), 12-Июл-10, 19:12 
ничего я не использовал, смотрите примеры кода и выдержки из спецификаций.

насчёт того, в какой секции располагается такая переменная, действительно не уверен - как-то не было такой проблемы никогда, поэтому не изучал вопрос.

Ответить | Правка | Наверх | Cообщить модератору

114. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от axe (??), 12-Июл-10, 20:38 
>ничего я не использовал, смотрите примеры кода и выдержки из спецификаций.

похоже что вы видимо никогда ничего на С и не писали, иначе почему вы ничего не знаете о варнингах компилятора?

>насчёт того, в какой секции располагается такая переменная, действительно не уверен -
>как-то не было такой проблемы никогда, поэтому не изучал вопрос.

это стековая переменная... ппц, какой нафиг раздел предварительно инициализированных переменных, люди??? Функция будет не реентерабельной. Не порите чушь.

Ответить | Правка | Наверх | Cообщить модератору

115. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от spanasikemail (ok), 12-Июл-10, 20:40 
>похоже что вы видимо никогда ничего на С и не писали, иначе
>почему вы ничего не знаете о варнингах компилятора?

Да с чего вы взяли, что я не знаю ???

Ответить | Правка | Наверх | Cообщить модератору

121. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от Ytch (?), 12-Июл-10, 21:37 
>это стековая переменная... ппц, какой нафиг раздел предварительно инициализированных переменных, люди??? Функция
>будет не реентерабельной. Не порите чушь.

Уточнение: или стековая или регистровая. Остальное верно.

Ответить | Правка | К родителю #114 | Наверх | Cообщить модератору

116. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +1 +/
Сообщение от Аноним (-), 12-Июл-10, 20:43 
При разработке надежного ПО на C используют, как минимум, -Wall -pedantic, если на то пошло. И никаких лишних телодвижений делать не надо — проверить что может, а чего не может, способна и машина.

Ну а для реально надежного ПО - как обычно, доказательный подход, Карри-Говард, ATP и все такое.

Ответить | Правка | К родителю #48 | Наверх | Cообщить модератору

45. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от mma (?), 12-Июл-10, 13:24 
Это с чего вы решили? В общем как код напишите так у вас и будет - известно или нет. Ну или приведите РЕАЛЬНЫЙ пример когда из ядра где есть этот недостаток, в противном случае это бездумное следование шаблону.
Ответить | Правка | К родителю #42 | Наверх | Cообщить модератору

47. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от spanasikemail (ok), 12-Июл-10, 13:30 
какой недостаток ? что непроинициализирована переменная ? так выше цифра приведена.


Ответить | Правка | Наверх | Cообщить модератору

62. "Продемонстрирован код, который по мнению SCO был скопирован ..."  –1 +/
Сообщение от szh (ok), 12-Июл-10, 14:16 
> какой недостаток ? что непроинициализирована переменная ?

нет, где это может привести к ошибке.

Ответить | Правка | Наверх | Cообщить модератору

109. "Продемонстрирован код, который по мнению SCO был скопирован ..."  –3 +/
Сообщение от spanasikemail (ok), 12-Июл-10, 19:17 
примера кода из ядра привести не могу, хотя вот посмотрите тут уже "модуль" набросали.

да, я предпочитаю бездумно следовать этому шаблону. более того, ругаюсь очень сильно, когда вижу непроинициализированные при объявлении переменные.

это тупо лучше при отладке, когда каждый раз значение переменной известно, а не случайно, и ломает всё в непредсказуемом порядке.

в общем, пишите софт, пробуйте сами как лучше, я тут высказал своё мнение, имею право. вы пишете софт по-своему - тоже имеете право.


Ответить | Правка | Наверх | Cообщить модератору

126. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +1 +/
Сообщение от PereresusNeVlezaetBuggyemail (ok), 12-Июл-10, 22:34 
>примера кода из ядра привести не могу, хотя вот посмотрите тут уже
>"модуль" набросали.
>
>да, я предпочитаю бездумно следовать этому шаблону. более того, ругаюсь очень сильно,
>когда вижу непроинициализированные при объявлении переменные.

Ну а кому-то удобнее наоборот, когда все переменные компактно объявляются в одном месте, а присваивания идут естественным образом по ходу дела. Это помогает следить за их количеством, что в случае с именно C порой весьма актуально, и отслеживать логику работы функции, не дёргаясь глазами по коду с мыслью "а во что эта хрень была выставлена-то?". И что удобнее читать, вот это:

/* Взято из src/lib/libc/stdio/mktemp.c в OpenBSD-CURRENT */
static int
mktemp_internal(char *path, int slen, int mode)
{
        char *start, *cp, *ep;
        const char *tempchars = TEMPCHARS;
        unsigned int r, tries;
        struct stat sb;
        size_t len;
        int fd;

        len = strlen(path);
        if (len == 0 || slen >= len) {
                errno = EINVAL;
                return(-1);
        }
        ep = path + len - slen;

        tries = 1;
        for (start = ep; start > path && start[-1] == 'X'; start--) {
                if (tries < INT_MAX / NUM_CHARS)
                        tries *= NUM_CHARS;
        }
        tries *= 2;


или вот это?
/* Модифицированная версия */
static int
mktemp_internal(char *path, int slen, int mode)
{
        char *start, *cp;
        size_t len = strlen(path);
        char *ep = path + len - slen;
        char *start = ep;
        const char *tempchars = TEMPCHARS;
        unsigned int r, tries = 1;
        struct stat sb;
        int fd;

        if (len == 0 || slen >= len) {
                errno = EINVAL;
                return(-1);
        }

        for (; start > path && start[-1] == 'X'; start--) {
                if (tries < INT_MAX / NUM_CHARS)
                        tries *= NUM_CHARS;
        }
        tries *= 2;


Про то, что хороший код - читаемый код, думаю, рассказывать не надо. :) Ну а современный компилятор, как уже говорилось, спасёт от глупых ошибок.

К слову, C99-компиляторы (а объявление переменных в середине кода - это есть C99) тоже не подо все ныне используемые платформы есть...

Ответить | Правка | Наверх | Cообщить модератору

134. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от pavlinux (ok), 13-Июл-10, 02:44 
>>примера кода из ядра привести не могу, хотя вот посмотрите тут уже
>>"модуль" набросали.
>>
>>да, я предпочитаю бездумно следовать этому шаблону. более того, ругаюсь очень сильно,
>>когда вижу непроинициализированные при объявлении переменные.
>
>Ну а кому-то удобнее наоборот, когда все переменные компактно объявляются в одном
>месте, а присваивания идут естественным образом по ходу дела.

Да уж, а то некоторые приплюснутые сишнеги пишут типа такого кода


int func(void) {

int i, j;

for (i = 0; i < LIMIT; i++ )
      j += 2*i;
//  Далее строк 200 кода одной функции
//
...
// и вдруг резко

   int i = 5;
   for ( int j = 10; j < i; j++) // ну не дибилы?!
      {
       //...
    }
//
} // EOF func()

Ответить | Правка | Наверх | Cообщить модератору

158. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от Карбофос (ok), 14-Июл-10, 00:56 
разве gcc не заматерится по поводу двойного объявления переменной? такое возможно разве что при выделении блоков /*{..}*/
Ответить | Правка | Наверх | Cообщить модератору

159. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от pavlinux (ok), 14-Июл-10, 01:00 
>разве gcc не заматерится по поводу двойного объявления переменной? такое возможно разве
>что при выделении блоков /*{..}*/

На i матернётся, на j - нет.

Более того, сработает вот такой маразм


#define LIMIT 25

int main(void) {

        double i;
        long long j[25];

        for ( char i = 0; i < LIMIT; i++ )
                *j += 2*i;
        i = *j;
        for ( int j; j < i; j++);
return *j;
}


Ответить | Правка | Наверх | Cообщить модератору

160. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от Карбофос (ok), 14-Июл-10, 01:57 
обратил внимание только на i, поэнтому не уточнил. :) с j все понятно, ибо в теле цикла.
последний пример вообще стараюсь избегать, стыдно будет за такое перед коллегами.
Ответить | Правка | К родителю #159 | Наверх | Cообщить модератору

162. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от pavlinux (ok), 14-Июл-10, 02:20 
>обратил внимание только на i, поэнтому не уточнил. :)
> с j все понятно, ибо в теле цикла.

Тело цикла это уже иная область видимости? Сублокальная?! :)

А чё ... я не против :) если итераторы будут умирать после окончания цикла.

типа
     for (int i = 0; i < X; i++) {
      Z *= i*i;
     }

     while (int j) {
      X = j+i;      // а тут i уже будет not declared
     }

Ответить | Правка | К родителю #160 | Наверх | Cообщить модератору

163. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от PereresusNeVlezaetBuggyemail (ok), 14-Июл-10, 02:52 
>[оверквотинг удален]
>типа
>     for (int i = 0; i <
>X; i++) {
>      Z *= i*i;
>     }
>
>     while (int j) {
>      X = j+i;    
>  // а тут i уже будет not declared
>     }

Помнится, одно время в C++ так и сделали.

Ответить | Правка | К родителю #162 | Наверх | Cообщить модератору

167. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от Карбофос (ok), 14-Июл-10, 10:49 
>Тело цикла это уже иная область видимости? Сублокальная?! :)

по крайней мере, компайлер должен проглотить j и даже не вякать. такое тоже встречал o_O еще хуже даже видел, когда j объявлена как глобальная O_O потом почему-то начинается неожиданная хрень. :)

Ответить | Правка | К родителю #162 | Наверх | Cообщить модератору

170. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от pavlinux (ok), 14-Июл-10, 19:07 
>>Тело цикла это уже иная область видимости? Сублокальная?! :)
>
>по крайней мере, компайлер должен проглотить j и даже не вякать. такое
>тоже встречал o_O еще хуже даже видел, когда j объявлена как
>глобальная O_O потом почему-то начинается неожиданная хрень. :)

Это называется С99

Ответить | Правка | К родителю #167 | Наверх | Cообщить модератору

53. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +3 +/
Сообщение от бугага (?), 12-Июл-10, 13:53 
int i;

for (i = 0; i < 10; i++)
{
...
}

какой ужас, это не будет работать :D

Ответить | Правка | К родителю #42 | Наверх | Cообщить модератору

84. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +3 +/
Сообщение от angel_il (ok), 12-Июл-10, 16:33 
нет! этот код может работать неверно в боевых условиях, когда синус 90 гр. достигает трех и более.
Ответить | Правка | Наверх | Cообщить модератору

54. "Продемонстрирован код, который по мнению SCO был скопирован ..."  –1 +/
Сообщение от Аноним (-), 12-Июл-10, 13:58 
>Должно. Из-за этого столько багов, что лучше обнулять.

А не достаточно ли просто быть внимательней, а то напоминает: http://bash.org.ru/quote/396506

Ответить | Правка | К родителю #42 | Наверх | Cообщить модератору

55. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +1 +/
Сообщение от Sw00p aka Jeromemail (?), 12-Июл-10, 14:07 
>>"Бездумная" инициализация автоматических переменных свидетельствует о непонимании того, как они обрабатываются.

с чего это вы решили что это автоматическая переменная ???

Ответить | Правка | К родителю #40 | Наверх | Cообщить модератору

86. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от pavlinux (ok), 12-Июл-10, 16:38 
>>>"Бездумная" инициализация автоматических переменных свидетельствует о непонимании того, как они обрабатываются.
>
>с чего это вы решили что это автоматическая переменная ???

Хватит тролить. Курите маны на GCC.

.... спецификатор переменной всегда является auto, если не указано иного - static, extern или register.

Ответить | Правка | Наверх | Cообщить модератору

93. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +1 +/
Сообщение от Sw00p aka Jeromemail (?), 12-Июл-10, 17:32 
>>>>"Бездумная" инициализация автоматических переменных свидетельствует о непонимании того, как они обрабатываются.
>>
>>с чего это вы решили что это автоматическая переменная ???
>
>Хватит тролить. Курите маны на GCC.
>
>
.... спецификатор переменной всегда является auto, если не указано иного - static, 
>extern или register.
>

покурил (я тя уважаю)
читаем внимательно последний абзац

#########################

Спецификатор класса памяти в объявлении переменной может быть auto, register, static или extern. Если класс памяти не указан, то он определяется по умолчанию из контекста объявления.

Объекты классов auto и register имеют локальное время жизни. Спецификаторы static и extern определяют объекты с глобальным временем жизни.

При объявлении переменной на внутреннем уровне может быть использован любой из четырех спецификаторов класса памяти, а если он не указан, то подразумевается класс памяти auto.

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

Переменная с классом памяти auto автоматически не инициализируется. Она должна быть проинициализирована явно при объявлении путем присвоения ей начального значения. Значение неинициализированной переменной с классом памяти auto считается неопределенным.

############################################################

ps:

Пример:
    int global_var;
    int func(void)
    { int local_var;                      /* по умолчанию auto  */
      static int *local_ptr=&local_var;   /*  так неправильно   */
      static int *global_ptr=&global_var; /*  а так правильно   */
      register int *reg_ptr=&local_var;   /*  и так правильно   */
    }

В приведенном примере глобальная переменная global_var имеет глобальное время жизни и постоянный адрес в памяти, и этот адрес можно использовать для инициализации статического указателя global_ptr. Локальная переменная local_var, имеющая класс памяти auto размещается в памяти только на время работы функции func, адрес этой переменной не является константой и не может быть использован для инициализации статической переменной local_ptr. Для инициализации локальной регистровой переменной reg_ptr можно использовать неконстантные выражения, и, в частности, адрес переменной local_ptr.


Ответить | Правка | Наверх | Cообщить модератору

94. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +1 +/
Сообщение от Sw00p aka Jeromemail (?), 12-Июл-10, 17:37 
>>>>"Бездумная" инициализация автоматических переменных свидетельствует о непонимании того, как они обрабатываются.
>>
>>с чего это вы решили что это автоматическая переменная ???
>
>Хватит тролить. Курите маны на GCC.
>
>
.... спецификатор переменной всегда является auto, если не указано иного - static, 
>extern или register.
>

в дополнении читаем внимательно 3 и 4 пункт

1.6.4. Инициализация глобальных и локальных переменных

При инициализации необходимо придерживаться следующих правил:

1. Объявления содержащие спецификатор класса памяти extern не могут содержать инициаторов.

2. Глобальные переменные всегда инициализируются, и если это не сделано явно, то они инициализируются нулевым значением.

3. Переменная с классом памяти static может быть инициализирована константным выражением. Инициализация для них выполняется один раз перед началом программы. Если явная инициализация отсутствует, то переменная инициализируется нулевым значением.

4. Инициализация переменных с классом памяти auto или register выполняется всякий раз при входе в блок, в котором они объявлены. Если инициализация переменных в объявлении отсутствует, то их начальное значение не определено.

5. Начальными значениями для глобальных переменных и для переменных с классом памяти static должны быть константные выражения. Адреса таких переменных являются константами и эти константы можно использовать для инициализации объявленных глобально указателей. Адреса переменных с классом памяти auto или register не являются константами и их нельзя использовать в инициаторах.

Ответить | Правка | К родителю #86 | Наверх | Cообщить модератору

124. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от Kash (??), 12-Июл-10, 22:01 
>[оверквотинг удален]
>
>4. Инициализация переменных с классом памяти auto или register выполняется всякий раз
>при входе в блок, в котором они объявлены. Если инициализация переменных
>в объявлении отсутствует, то их начальное значение не определено.
>
>5. Начальными значениями для глобальных переменных и для переменных с классом памяти
>static должны быть константные выражения. Адреса таких переменных являются константами и
>эти константы можно использовать для инициализации объявленных глобально указателей. Адреса переменных
>с классом памяти auto или register не являются константами и их
>нельзя использовать в инициаторах.

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

Ответить | Правка | Наверх | Cообщить модератору

130. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от Sw00p aka Jeromemail (?), 12-Июл-10, 23:00 
>И как это противоречит процитированному утверждению?
>По поводу явной инициализации: не вижу ничего плохого в объявлении переменных без
>явной инициализации в случае, когда им присваивается значение далее по коду.
>Есть ли какая-нибудь разница при записи в памяти поверх нулей или
>поверх мусора? Если же программист попробует использовать не инициализированную переменную, то
>его об этом известит компилятор, о чем выше писалось неоднократно.

int func(void)
{
    int local_var;                      /* по умолчанию auto  */
    static int *local_ptr=&local_var;   /*  так неправильно   */
.........

тады обьясните почему неправильно ??

Ответить | Правка | Наверх | Cообщить модератору

135. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от pavlinux (ok), 13-Июл-10, 03:03 
>[оверквотинг удален]
>int func(void)
>{
>    int local_var;      
>          
>    /* по умолчанию auto  */
>    static int *local_ptr=&local_var;   /*  так
>неправильно   */
>.........
>
>тады объясните почему неправильно ??

Все правильно, только лишено какой-либо логики, кроме как для теста для компилятора и ОСи.

Глупо инициализировать переменные если они редко будут использоваться:


int func(int a, int b) {

  int i, j;
  
  if ( a < b )
     return -1;

  i = a*b;

  if ( i % 5 )
     return -1;

  j = i % 5;

return i+j;
}

Как видите, при a < b значения i и j пофигу какие.

Все это можно даже упростить до:


int func(int a, int b) {

  if ( a < b )
     return -1;
  if ( (a*b) % 5 )
     return -1;
  return (a*b)+((a*b) % 5);
}

Ответить | Правка | Наверх | Cообщить модератору

140. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от Sw00p aka Jeromemail (?), 13-Июл-10, 10:59 
>[оверквотинг удален]
>
 
>int func(int a, int b) {
>
>  if ( a < b )
>     return -1;
>  if ( (a*b) % 5 )
>     return -1;
>  return (a*b)+((a*b) % 5);
>}
>

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

для глобальных - да типа "глупо"

Ответить | Правка | Наверх | Cообщить модератору

145. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от pavlinux (ok), 13-Июл-10, 12:34 
>>[оверквотинг удален]
>нет не глупо особенно переменные которые попадают в локальную область видимости (без
>инициализации в них храниться мусор и порой это может стать причиной ошибки)

Какая может возникнуть ошибка, если эту переменную я не использую?
От инициализированной локальной переменной вообще никакого толка.


int func(void) {

int i = 25; // шо такое 25 ?

do {
     i--;
} while ( i > 0 )

}


Заменяется на:

#define LIMIT 25

int func(void) {

int i;

for (i = LIMIT; i > 0; i--) {
}
}


Ответить | Правка | Наверх | Cообщить модератору

146. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от Sw00p aka Jeromemail (?), 13-Июл-10, 13:20 
у вменяемых такого рода ошибок не будет

int func(void)
{
    int local_var;                      /* по умолчанию auto  */
    static int *local_ptr=&local_var;   /*  так неправильно   */

Ответить | Правка | Наверх | Cообщить модератору

174. "Продемонстрирован код, который по мнению SCO был скопирован ..."  +/
Сообщение от pavlinux (ok), 15-Июл-10, 03:21 
>[оверквотинг удален]
>
 
>int func(int a, int b) {
>
>  if ( a < b )
>     return -1;
>  if ( (a*b) % 5 )
>     return -1;
>  return (a*b)+((a*b) % 5);
>}
>

 
inline int func(int a, int b) {

return (a < b) ? -1 : (((a*b) % 5) ? -1 : (a*b)+((a*b) % 5));
}

Гы

 
inline int func(int a, int b) {

return (  ( (a < b) || ((a*b) % 5)) ) ? -1 : ( (a*b) + ((a*b) % 5) )  );
}


гы-гы
Ответить | Правка | К родителю #135 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру