Я недавно настроил среду MinGW + MSYS на своем ноутбуке, чтобы проверить, как обстоят дела с поддержкой NetBeans C/C++. Тем не менее, все работает нормально, однако во время тестирования я заметил разницу между GCC и компилятором cl.exe от Microsoft.GCC - не должно выдаваться предупреждение?
Вот пример программы:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main(void) {
int i_max = INT_MAX;
char c_max = CHAR_MAX, c;
c = i_max;
printf("i_max: %d, c_max: %d, c: %d\n", i_max, c_max, c);
return EXIT_SUCCESS;
}
Выход:
i_max: 2147483647, c_max: 127, c: -1
Как вы можете видеть в приведенном выше коде, я назначить Int к полукокса. Не следует ли предупреждать о возможной потере данных? Компилятор Microsoft (который я настроил очень строгий) выдает предупреждение, а GCC - нет.
Вот варианты GCC я использую:
-g -Werror -ansi -pedantic -Wall -Wextra
Я пропускаю некоторые опции GCC, чтобы время компиляции проверки еще строже?
http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html Эта ссылка покажет вам, что _is_ включено в Wall and Wextra. Почему wconverersion не является полной загадкой/ошибкой. – Pod
Мое мнение состоит в том, что эти предупреждения являются болью в задней части гораздо чаще, чем они что-то ловят, и мое решение о политических решениях gcc состоит в том, что они склонны так думать. Было бы неплохо иметь один вариант -W, который означал бы «проверить все, независимо от того, насколько раздражает», конечно. –
не работает для меня. используя «gcc -g -Werror -ansi -pedantic -Wall -Wextra -Wconversion foo.c» с приведенным выше кодом в файле foo.c не дает никаких предупреждений с gcc 4.1.2 – Glen