Я думаю, у меня есть сложный вопрос, но я уверен, что вы сможете мне помочь. Скажем, у меня есть функция, как это:Литейная изменчивая переменная в c
char my_function (int example);
Я использую эту функцию в нескольких случаях, иногда аргумент он получает является летучим переменным, а иногда энергонезависимым переменным. Это вызывает некоторые предупреждения, когда я компилирую свой код, который можно легко удалить с помощью приведения, но я хочу понять, что является более безопасным сценарием и почему.
Сценарий 1:
Прототип char my_function (int example);
int a;
volatile int b;
my_function (a); // Everything is fine.
my_function ((int)b); // Avoided the warning, by casting the variable and saying it's no longer volatile.
Сценарий 2:
Прототип char my_function (volatile int example);
int a;
volatile int b;
my_function(b); // Everything is fine.
my_function((volatile int)a); // Avoided the warning, by casting 'a' saying that now it's volatile.
Я понимаю, как летучий Модификатор работает, я в основном использовать его, потому что Я программирую микроконтроллеры, и я люблю d, чтобы гарантировать, что некоторые из моих переменных никогда не будут оптимизированы, когда они будут модифицированы аппаратными средствами. Я немного смущен тем, что вы меняете изменчивый модификатор, поэтому я хочу понять, что является более безопасным сценарием, кроме как просто удаления предупреждения.
Возможный дубликат [изменчивых переменных как аргумент функции] (http://stackoverflow.com/questions/3303660/volatile-variables-as-argument-to-function) – kdopen
Чтобы устранить основную причину, объявите 'my_function' с помощью параметр 'volatile' – kdopen
' volatile' не является модификатором, а определителем. Модификаторов нет. И ваш вопрос непонятен. Хотя вы говорите иначе, ваш текст позволяет предположить, что вы не знаете, как работает «volatile». Пересмотрите свою книгу C или получите лучшую. И никогда не произносите выражение, пока не осознаете ** все ** последствия. У меня есть серьезные сомнения. – Olaf