Изменение только константного примитива, генерирующего предупреждение - PullRequest
1 голос
/ 18 января 2012

Я использую Dev-C ++ v4.9.8.0, и я написал строки

const int i = 512;
i = 200;

и когда я пошел к компиляции, я ожидал увидеть ошибку во время компиляции, но получил только предупреждение. Я сказал Dev-C ++, что хочу скомпилировать это в C-программу. Мой компилятор под капотом - MinGW gcc v2.95, все это работает на компьютере с Windows 7. Я думал, что это был языковой стандарт для генерации ошибки во время компиляции, когда программа пытается изменить значение, объявленное с квалификатором const. Стандарт говорит, что это только оправдывает предупреждение?

Вот моя программа:

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

int main(int argc, char *argv[])
{
  const int i = 512;
  i = 250;

  system("PAUSE");  
  return 0;
}

А вот и журнал компиляции:

7 C: \ C_Programs \ Practice \ main.c [Предупреждение] назначение переменной только для чтения `i '

Ответы [ 2 ]

4 голосов
/ 18 января 2012

«Стандарт говорит, что это только предупреждение?»

Стандарт не делает различий между предупреждениями и ошибками. Стандарт имеет только диагностические сообщения.

const int i = 512;
i = 200;

В этой программе нарушено ограничение оператора присваивания. Реализация должна выдать диагностическое сообщение. Затем компилятор может продолжить перевод этой программы. Но программа с нарушением ограничения не является программой на Си.

3 голосов
/ 18 января 2012

gcc 2.95 - древний .В нем много ошибок, которые были исправлены в более поздних версиях.

Лучше всего перейти на более новую версию gcc.

...