The OpenNET Project / Index page

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



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

Оглавление

Дэниэл Бернштейн выступил с инициативой создания Си-компилят..., opennews (??), 22-Дек-15, (0) [смотреть все] +1

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


30. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +4 +/
Сообщение от Аноним (-), 22-Дек-15, 15:20 
gcc уже давным давно выдает варнинг при попытке использования неинициализированной локальной переменной.
Без всяких Бернштейнов.
Ответить | Правка | Наверх | Cообщить модератору

44. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +1 +/
Сообщение от Аноним (-), 22-Дек-15, 15:59 
>gcc уже давным давно выдает варнинг при попытке использования неинициализированной локальной переменной.

Только в самых тривиальных случаях.


#include<stdio.h>
#include<stdlib.h>
int main(int argc, char **argv)
{
  int b;
  printf("%lx",b);
}

gcc -Wuninitialized *.c
«b» is used uninitialized in this function
Предупреждение есть.

#include<stdio.h>
#include<stdlib.h>

void take_ptr(int *ptr)
{
  printf("YOLO World!");
}

int main(int argc, char **argv)
{
  int b;
  take_ptr(&b);  
  printf("%lx",b);
}


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

51. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +/
Сообщение от Аноним (-), 22-Дек-15, 16:12 
"А вы на шкаф залезьте" (c)

Естественно нет. У компилятора С просто нет информации чтобы в любом случае определить что происходит при передаче указателя на переменную в другую функцию.
Тут какой-то другой язык нужен :)

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

66. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +/
Сообщение от Аноним (66), 22-Дек-15, 17:06 
gcc -O2 -Wall unused.c
unused.c:12:3: предупреждение: <b> is used uninitialized in this function [-Wuninitialized] printf("%lx",b);
А -O3 находит такие варианты, что фиг поймёшь каким образом она может быть неинициализированой. А выставлять в таких случаешь заранее NULL, это далеко не всегда лучшее решение. Потом этот NULL всплывёт в какой нибудь структуре и уже концов не найдёшь.
Ответить | Правка | К родителю #44 | Наверх | Cообщить модератору

68. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  –1 +/
Сообщение от Аноним (-), 22-Дек-15, 17:15 
$gcc --version
gcc (GCC) 4.9.2 20150212 (Red Hat 4.9.2-6)

во втором случае
gcc -Wuninitialized unused.c
предупреждений нет.

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

135. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +1 +/
Сообщение от Аноним (66), 23-Дек-15, 05:19 
> во втором случае
> gcc -Wuninitialized unused.c
> предупреждений нет.

Ключевое слово -O2, анализатор намертво прибит к оптимизатору.

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

50. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +/
Сообщение от Pickle (?), 22-Дек-15, 16:08 
Меня смущают люди, которые используют неинициализированные переменные, кроме как для инициализации оной.

Объяснишь в чем сакральный смысл?

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

54. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  –1 +/
Сообщение от Pickle (?), 22-Дек-15, 16:14 
> Меня смущают люди, которые используют неинициализированные переменные, кроме как для инициализации
> оной.
> Объяснишь в чем сакральный смысл?

Добавил: я к тому, что я уже на автомате делаю, что-то типа int i=0;

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

56. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +2 +/
Сообщение от Аноним (-), 22-Дек-15, 16:18 
Не делайте так больше никогда. Рискуете пропустить важный варнинг от компилятора.
Ответить | Правка | Наверх | Cообщить модератору

55. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +/
Сообщение от Аноним (-), 22-Дек-15, 16:17 
Иногда инициализация заключается в передаче указателя на переменную в функцию.

Например вот такой широко распространенный в программах для UNIX кусок кода:

struct stat st;
int ret;

ret = stat(filename, &st);

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

119. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +/
Сообщение от ACCA (ok), 22-Дек-15, 23:06 
Бывают особые случаи.

https://www.schneier.com/blog/archives/2008/05/random_number...

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

145. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +/
Сообщение от Аноним (-), 23-Дек-15, 12:58 
Это не "особые случаи", а ССЗБ, заслуженно наступивший на грабли.
Ответить | Правка | Наверх | Cообщить модератору

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

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




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

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