Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 08.04.2015
Сообщений: 36

Объяснить назначение ключевого слова static

27.12.2015, 13:28. Показов 2611. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Я пытаюсь разобраться с использованием static`a и у меня такой вопрос: будет ли корректно работать программа конвертирования числа в строку , если объявить массив char как static ?
C++
1
2
3
4
5
char * itoa(int x)
{
    static char buffer[20];
/*.....*/
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.12.2015, 13:28
Ответы с готовыми решениями:

Нюансы синтаксиса: объяснить использование ключевого слова typedef в заданном фрагменте кода
Всем привет. Недавно на просторах интернета столкнулся с таким кодом: typedef double(*pointFunc)(double); double f(double x) { ...

Назначение static ?
Здравствуйте. Я уже прочитал в двух книгах про статик,читал в википедии,но так и не понимаю для чего он ? Кучи больших текстов и объяснений...

Объяснить назначение макроса
помогите разобраться для чего может служить подобная конструкция макроса #define MACRO_Z "%_z_%"?

40
393 / 165 / 32
Регистрация: 10.12.2015
Сообщений: 717
28.12.2015, 14:49
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Renji Посмотреть сообщение
ctime потокобезопасность (thread-safety) не дает
А должен? По-моему нет. Си вообще никакой безопасности не дает. В любом виде.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
28.12.2015, 14:57
Цитата Сообщение от hoggy Посмотреть сообщение
построить безопасные сингелтоны,
Ну, для сингелтона оно действительно полезно. Но разговор начался с массива char.
Цитата Сообщение от cyber-satyr Посмотреть сообщение
А должен?
Если он для практического использования в многопоточной среде то да, должен. В Линуксе, кстати, есть ctime_r, который гарантии безопасности как раз таки дает. Но в стандарт эта функция не входит, так что ее использование сделает код не переносимым.
0
393 / 165 / 32
Регистрация: 10.12.2015
Сообщений: 717
28.12.2015, 15:12
Linux вообще не выделяется следованию posix, epoll и много чего другого тоже не портабельны. Но я не вижу проблемы. Если человек пишет на си, то он сам обязан знать какие функции потокобезопасны, а какие нет. В чем проблема лочить потоки? А си такой какой есть. Уж в этом языке потокобезопасностью стандартной библиотеки точно никто заниматься не станет.

Добавлено через 1 минуту
Цитата Сообщение от Renji Посмотреть сообщение
Если он для практического использования в многопоточной среде то да, должен
Так что я твердо убежден в том что не должен. Ты бы еще на ассемблер пожаловался что инструкции not thread-safety.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
28.12.2015, 15:22
Цитата Сообщение от cyber-satyr Посмотреть сообщение
В чем проблема лочить потоки?
В том что для потокобезопасности это даром не нужно.
C++
1
2
3
4
time_t current_time=time(NULL);
char local_buf[128];
//ctime_r использует размещенный в стеке local_buf, а потому не конфликтует с вызовами из других потоков
cout<<ctime_r(&time,local_buf);
Цитата Сообщение от cyber-satyr Посмотреть сообщение
Так что я твердо убежден в том что не должен. Ты бы еще на ассемблер пожаловался что инструкции not thread-safety.
Ассемблерный префикс lock введен именно для thread-safety.
0
393 / 165 / 32
Регистрация: 10.12.2015
Сообщений: 717
28.12.2015, 15:43
Цитата Сообщение от Renji Посмотреть сообщение
Ассемблерный префикс lock введен именно для thread-safety
а это для чего?
C
1
2
3
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
ну вот еще man
POSIX.1-2001 says: "The asctime(), ctime(), gmtime(), and localtime() functions shall return values in one of two static objects: a broken-down time structure and an array of type char. Execution of any of the functions may overwrite the information returned in either of these objects by any of the other functions."
проблема надуманна
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
28.12.2015, 16:10
Цитата Сообщение от cyber-satyr Посмотреть сообщение
а это для чего?
А это для возвращения управления системе, на время ожидания освобождения мютекса. Это уже вопрос не потокобезопасности, а ресурсоемкости ассемблерного спинлока (который таки thread safety). Причем, вопрос неоднозначный, так как pthread_mutex_lock окупится только при относительно долгом ожидании.
Цитата Сообщение от cyber-satyr Посмотреть сообщение
ну вот еще man
И что из этого man должно следовать, кроме отсутствия там слов "thread-safety"?
0
393 / 165 / 32
Регистрация: 10.12.2015
Сообщений: 717
28.12.2015, 16:15
Цитата Сообщение от Renji Посмотреть сообщение
И что из этого man должно следовать, кроме отсутствия там слов "thread-safety"?
Цитата Сообщение от cyber-satyr Посмотреть сообщение
functions shall return values in one of two static objects
Ты споришь лишь бы спорить?

Добавлено через 3 минуты
Цитата Сообщение от Renji Посмотреть сообщение
А это для возвращения управления системе, на время ожидания освобождения мютекса
А в "системе" потоков нет? Молжно было ответить короче: это для потокобезопасности.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
28.12.2015, 16:23
Цитата Сообщение от cyber-satyr Посмотреть сообщение
Ты споришь лишь бы спорить?
"functions shall return values in one of two static objects" - ну и? Static objects в которых возвращаются values ни разу не потокобезопасные. Потому как все обратившиеся к functions потоки получают один object (на то он и static) и стукаются лбами в процессе.
Цитата Сообщение от cyber-satyr Посмотреть сообщение
А в "системе" потоков нет?
Система сама отбирает управление у потока, по истечении определенного кванта времени. Если, конечно, вы не мумия до сих пор работающая под Досом. Процессор при этом сильно грузится, но это уже проблемы не безопасности, а рационального расхода ресурсов.
0
393 / 165 / 32
Регистрация: 10.12.2015
Сообщений: 717
28.12.2015, 16:55
Цитата Сообщение от Renji Посмотреть сообщение
"functions shall return values in one of two static objects" - ну и? Static objects в которых возвращаются values ни разу не потокобезопасные. Потому как все обратившиеся к functions потоки получают один object (на то он и static) и стукаются лбами в процессе.
И для тебя особо тяжело учесть эту информацию в процессе разработки? По-моему всё четко разжевано. Ты начал ныть что C standard library не обновляется. Вопрос, зачем если большинство сишных проектов по определению обязаны соответствовать стандарту 89 года? Даже с99 в продакшене диковинка.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
28.12.2015, 17:20
Цитата Сообщение от cyber-satyr Посмотреть сообщение
И для тебя особо тяжело учесть эту информацию в процессе разработки?
А почему именно я должен подпирать косяки стандарта мютекс-костылями, а не авторы стандарта эти косяки выправлять? Мне всегда казалось что это авторы стандартов и компиляторов работают ради программиста, а не наоборот.
Цитата Сообщение от cyber-satyr Посмотреть сообщение
Вопрос, зачем если большинство сишных проектов по определению обязаны соответствовать стандарту 89 года? Даже с99 в продакшене диковинка.
Все гораздо хуже. Большинство сишных проектов до сих пор тянут за собой рудименты типа void func(void) и struct my_struct*point=NULL, оставшиеся еще со времен зарождения C++. И не имеющие ныне абсолютно никакого смысла кроме "так в стандарте написано". Я и говорю, мумии не обновляются.
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
28.12.2015, 17:28
Цитата Сообщение от Renji Посмотреть сообщение
это для возвращения управления системе, на время ожидания освобождения мютекса
Скорее для блокировки шины доступа к данным. Уже на этом свойстве крутится спинлок.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
28.12.2015, 17:31
Цитата Сообщение от Kastaneda Посмотреть сообщение
Скорее для блокировки шины доступа к данным.
Вот как раз шина ассемблерным префиксом lock и блокируется. А системные вызовы нужны именно чтобы вернуть остатки кванта времени системе.
0
393 / 165 / 32
Регистрация: 10.12.2015
Сообщений: 717
28.12.2015, 17:38
Цитата Сообщение от Renji Посмотреть сообщение
А почему именно я должен подпирать косяки стандарта мютекс-костылями, а не авторы стандарта эти косяки выправлять?
Потому что это не косяки стандарта и он вполне соответствует своему времени. Есть еще обратная совместимость. Не нравится, не выбирай си (или ctime).
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
28.12.2015, 17:46
Цитата Сообщение от cyber-satyr Посмотреть сообщение
Потому что это не косяки стандарта и он вполне соответствует своему времени.
Ну да, стандарт вполне соответствует времени однозадачного DOS, реального режима и "640 килобайт хватит всем". Там проблемы с многопоточностью не возникали, за отсутствием таковой как класса. Только вот, компьютер соответствующий тем временам - такой же музейный экспонат, как и египетские мумии.
Цитата Сообщение от cyber-satyr Посмотреть сообщение
Не нравится, не выбирай си (или ctime).
И рад бы, но альтернативы ctime в стандарте C++ просто нет.
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
28.12.2015, 17:46
Цитата Сообщение от Renji Посмотреть сообщение
Вот как раз шина ассемблерным префиксом lock и блокируется
Ну так и я о чем.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
28.12.2015, 17:48
Цитата Сообщение от Kastaneda Посмотреть сообщение
Ну так и я о чем.
Так я то отвечал на вопрос про pthread_mutex_lock.
0
393 / 165 / 32
Регистрация: 10.12.2015
Сообщений: 717
28.12.2015, 17:49
Цитата Сообщение от Renji Посмотреть сообщение
Ну да, стандарт вполне соответствует времени однозадачного DOS, реального режима и "640 килобайт хватит всем". Там проблемы с многопоточностью не возникали, за отсутствием таковой как класса.
Что ты несешь? Си писался для unix, изначально многозадачной и многопользовательской ОС. DOS'ом тогда и не пахло даже.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
28.12.2015, 17:58
Цитата Сообщение от cyber-satyr Посмотреть сообщение
Что ты несешь? Си писался для unix, изначально многозадачной и многопользовательской ОС.
Значит, он с рождения требовал подпорки сторонним ctime_r. Я очень сомневаюсь что там вместо этого мютексы гоняли - компьютеры были слабоваты чтоб так ресурсы разбазаривать.
0
393 / 165 / 32
Регистрация: 10.12.2015
Сообщений: 717
28.12.2015, 18:02
Ну как ты заметил про 640 Kb времена изменились. Тогда, видимо это не было так страшно ни для кого как для тебя сейчас.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
28.12.2015, 18:12
Цитата Сообщение от cyber-satyr Посмотреть сообщение
Ну как ты заметил про 640 Kb времена изменились. Тогда, видимо это не было так страшно ни для кого как для тебя сейчас.
Если конкретно под Linux писать, оно и сейчас не страшно - ctime_r в комплекте с ОС идет. Вот с кроссплатформенным кодом беда, наличия ctime_r под винду или Мак никто не обещал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.12.2015, 18:12

Объяснить назначение элемента кода
C++ зачем запятая перед пабликом? ,public PhysObject

Объяснить назначение функций getchar и putchar
Всем привет!) Объясните, пожалуйста, для чего нужна функция getchar и putchar максимально понятным для новичка языком, приводя пример....

Объяснить назначение и работу статического метода
Объясните, пожалуйста, как работает статический метод и для чего он нужен, вот пример: class Expm { int a; int b; public:...

Объяснить назначение и нюансы работы функции strtok()
Что делает это? for (char *p = strtok(str, del); p; p = strtok(NULL, del)) а именно ; p; p = strtok(NULL, del))

Объяснить назначение функции length(), принимающей в качестве аргумента std::vector
Добрый день! Подскажите, пожалуйста. Есть такая переменная: vector&lt;float&gt; Yvect C тремя числами: 3 1 0 d=length(Yvect); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru