Как удалить переменную в c
Перейти к содержимому

Как удалить переменную в c

  • автор:

Удалить ненужную пустую переменную (IDE0110)

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

Варианты

Это правило не имеет связанных параметров стиля кода.

Пример

// Code with violations switch (o) < case int _: Console.WriteLine("Value was an int"); break; case string _: Console.WriteLine("Value was a string"); break; >// Fixed code switch (o)

Отключение предупреждений

Если вы хотите отключить только одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и снова включить правило.

#pragma warning disable IDE0110 // The code that's violating the rule is on this line. #pragma warning restore IDE0110 

Чтобы отключить правило для файла, папки или проекта, присвойте ей значение серьезности none в файле конфигурации.

[*.] dotnet_diagnostic.IDE0110.severity = none 

Чтобы отключить все правила в стиле кода, задайте серьезность для категории Style none в файле конфигурации.

[*.] dotnet_analyzer_diagnostic.category-Style.severity = none 

См. также

  • Правила языка
  • Справочник по правилам стиля кода

Совместная работа с нами на GitHub

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

Как «забыть» переменную на c/c++?

Как «забыть» переменную на с/с++? Припустим ты использовал переменную, и она тебе больше нигде не нужна, вопрос: как ее удалить?

  • Вопрос задан более года назад
  • 827 просмотров

Комментировать
Решения вопроса 2
Сергей Горностаев @sergey-gornostaev Куратор тега C
Седой и строгий

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

Ответ написан более года назад
Комментировать
Нравится 7 Комментировать
skyazimuth @skyazimuth

Во-первых, переменные с модификатором static видны только в модуле в котором объявлены. Хотя, в общем случае, они будут физически храниться всю жизнь программы. Во-вторых, переменные, объявленные внутри блока живут только на время выполнения этого блока, кроме static внутри функции. Грубо говоря, все что внутри фигурных скобок только там и существует. Причем, блок можно создать и в нетипичных местах, например, case 0: или вообще в произвольном месте функции. В-третьих, оптимизатор сам следит за тем, где используется переменная. И если он видит, что дальше в функции переменная не используется, то физически на ее месте в памяти может разместить другую. Но с точки зрения текста программы, конечно, она будет считаться видимой до конца блока.

Ответ написан более года назад
Комментировать
Нравится 2 Комментировать
Ответы на вопрос 0
Ваш ответ на вопрос

Войдите, чтобы написать ответ

linux

  • Linux
  • +1 ещё

Как сделать многопоток сокетов?

  • 1 подписчик
  • 6 часов назад
  • 63 просмотра

Как удалить переменные в c++?

Как удалить переменные в программе на C++? У меня есть простой int list[10]; , и я хочу удалить его и изменить на int list[9] . Я бы использовал векторы, но все еще хочу знать, как это сделать c++ arrays

Поделиться Источник 02 декабря 2010 в 20:48

6 ответов

Если у вас есть что-то объявленное так:

int list[10]; 

нет способа «удалить» его. Это либо глобальная переменная с статически выделенным хранилищем, либо локальная переменная с хранилищем в стеке. Я не знаю точно, что вы пытаетесь достичь, но, возможно, что-то вроде этого поможет вам разобраться в этом:

int *list = new int[10]; // allocate a new array of 10 ints delete [] list; // deallocate that array list = new int[9]; // allocate new array with 9 ints 

Как вы предлагаете в своем вопросе, вам почти всегда будет лучше использовать std::vector , std::list и т.д., а не использовать сырые массивы в стиле C.

Поделиться 02 декабря 2010 в 20:51

  • Создайте дочернюю область видимости и определите новую переменную с тем же именем с другим типом.
  • Переключите list на int* и выделите его память на кучу. Это будет иметь эффект переопределения его на другой размер без изменения его типа.

Поделиться 02 декабря 2010 в 20:51

Чтобы удалить массив в C++, вы должны использовать оператор delete[] . См. эту ссылку.

Вам нужно быть осторожным. То, что у вас есть, это статический массив. Когда вы используете delete или delete[] , он должен быть на динамически выделенных переменных (их вы создали с помощью new ). Для этого:

int* list = new int[10]; //. Code. delete[] list; list = new int[9]; 

Не забудьте delete , если вы используете new ! (В идеале вы должны использовать что-то управляемое, чтобы не забыть, как вы сказали).

Поделиться 02 декабря 2010 в 20:54

Если ваш массив выделен в куче, то:

int *L = new int[10]; delete[] L; L = new int[9]; 

Нет понятия «удаления» локальной переменной, объявленной в стеке.

Поделиться 02 декабря 2010 в 20:51

Ваш int list[10]; является статическим. Массивы, объявленные как переменные, являются статическими объектами в C++, и вы не можете удалять/создавать их. это вопрос времени компиляции.

Вам нужно явно объявить ваш массив как объект массива, например

int *list=new int[10]; 

Хотя он все еще выводит объявление, это не так: новый операнд вызовет код выделения mem). Если вы хотите выделить больше или меньше места, вам нужно сначала освободить его:

delete[] list; 

а затем использовать новый операнд для создания нового (такого же типа int )

Поделиться 02 декабря 2010 в 20:58

Конечно, вы всегда можете сделать это:

 < int list[10]; . 'list' has 10 elements . < int list[9]; . 'list' has 9 elements . other 'list' inaccessible >. 'list' 10 elements . other 'list' non-existent. > 

Не могу представить, почему бы.

Удалить переменную в теле программы Си

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

Перемещено beastie из general

Caesium137
10.05.19 10:54:27 MSK
1 2 →

Во-первых, в development. Во-вторых, Это что, клуб изучения Си?

XMs ★★★★★
( 10.05.19 10:56:30 MSK )

Статическую нет, выделяй динамически, если переменная — экземпляр большой структуры, если это какой-нибудь int, то ваще забей.

Не, поизвращаться на самом деле можно, это же си, но ты что-то делаешь не так. Зачем тебе её удалять и что ты вообще под этим понимаешь?

DELIRIUM ☆☆☆☆☆
( 10.05.19 10:56:32 MSK )
Последнее исправление: DELIRIUM 10.05.19 10:58:55 MSK (всего исправлений: 1)

Ответ на: комментарий от XMs 10.05.19 10:56:30 MSK

Да ладно тебе агриться, с каких пор тут вопросы по сям запрещены?

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:00:22 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 10:56:32 MSK

Чтобы осталось больше памяти

Caesium137
( 10.05.19 11:00:26 MSK ) автор топика

Я объявляю статическую переменную counter в начале программы

Интересно, что ты понимаешь под «объявляю» и «статическую». Как ты понимаешь это физически?

Deleted
( 10.05.19 11:00:32 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:00:32 MSK

static int counter

Caesium137
( 10.05.19 11:01:00 MSK ) автор топика
Ответ на: комментарий от Caesium137 10.05.19 11:00:26 MSK

Сколько памяти она занимает и сколько у тебя есть? У тебя что, микроконтроллер?

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:01:32 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 11:01:32 MSK

Да, микроконтроллер Arduino

Caesium137
( 10.05.19 11:02:01 MSK ) автор топика
Ответ на: комментарий от Caesium137 10.05.19 11:01:00 MSK

Ты экономишь 4 байта?

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:02:12 MSK )
Ответ на: комментарий от Caesium137 10.05.19 11:01:00 MSK

Вопрос явно не понят. Что происходит физически?

Deleted
( 10.05.19 11:02:22 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 11:02:12 MSK

А почему бы и нет?

Caesium137
( 10.05.19 11:02:53 MSK ) автор топика
Ответ на: комментарий от Caesium137 10.05.19 11:02:53 MSK

Потому, что твоё последнее сообщение весит больше))

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:03:46 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 11:03:46 MSK

Ну, так можно или нет?

Caesium137
( 10.05.19 11:04:27 MSK ) автор топика
Ответ на: комментарий от Caesium137 10.05.19 11:04:27 MSK

Подсказываю: «объявление» — это выделение памяти, где произойдёт это выделение с учётом static?

Deleted
( 10.05.19 11:06:40 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:06:40 MSK
Caesium137
( 10.05.19 11:07:27 MSK ) автор топика
Ответ на: комментарий от Deleted 10.05.19 11:06:40 MSK

Это вообще возможно?

Caesium137
( 10.05.19 11:08:31 MSK ) автор топика
Ответ на: комментарий от Caesium137 10.05.19 11:07:27 MSK

Фактически в «теле» процесса. Пока процесс не завершён, ты ничего назад не получишь.

Deleted
( 10.05.19 11:08:49 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:08:49 MSK

Значит, так сделать нельзя?

Caesium137
( 10.05.19 11:11:17 MSK ) автор топика
Ответ на: комментарий от Caesium137 10.05.19 11:11:17 MSK

Как мне известно, нельзя. Физически не получится.

Deleted
( 10.05.19 11:12:14 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:08:49 MSK

Ну переписать область в сегменте данных можно.

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:12:18 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 11:12:18 MSK

Можешь дать пример кода?

Caesium137
( 10.05.19 11:12:58 MSK ) автор топика
Ответ на: комментарий от DELIRIUM 10.05.19 11:12:18 MSK

Ну переписать область в сегменте данных можно.

Deleted
( 10.05.19 11:13:12 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:13:12 MSK

Так он так и не ответил, что он понимает под освободить. Он видимо хочет переиспользовать память, переписать это и означает.

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:15:34 MSK )
Ответ на: комментарий от Caesium137 10.05.19 11:12:58 MSK

Нет, гугли. И учти, что это будет системно-зависимо.

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:16:15 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 11:15:34 MSK
Deleted
( 10.05.19 11:16:43 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:16:43 MSK

Ну тогда ой) вот что я нашёл на со

Assuming you are using gnu tools (gcc, binutils) if you look at the linker scripts the embedded folks use like the gba developers and microcontroller developers using roms (yagarto or devkit-arm for example). In the linker script they surround the segments of interest with variables that they can use elsewhere in their code. For rom based software for example you specify the data segment with a ram AT rom or rom AT ram in the linker script meaning link as if the data segment is in ram at this address space, but also link the data itself into rom at this address space, the boot code then copies the .data segment from the rom to the ram using these variables. I dont see why you couldnt do the same thing to have the compiler/linker tools tell you where stuff is then runtime use those variables to grab the data from memory and save it somewhere to hybernate or shut down and then restore that data from wherever. The variables you use to perform the restore of course should not be part of the .data segment or you trash the variables you are using to restore the segment.

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:18:54 MSK )

Я поставил стул, чтобы сидеть, когда читаю и ем, но когда сплю, он не нужен. Можно ли его как-то выкинуть?

anonymous
( 10.05.19 11:20:27 MSK )
Ответ на: комментарий от anonymous 10.05.19 11:20:27 MSK

Не совсем корректная аналогия, стул ты можешь выкинуть хоть в окно в любой момент.

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:22:24 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 11:22:24 MSK

стул ты можешь выкинуть хоть в окно в любой момент.

Дополним аналогию. Стул заставлен со всех сторон шкафами. )

Deleted
( 10.05.19 11:23:59 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:23:59 MSK

Шкафы можно отодвинуть)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *