Почему делает компиляцию C, кодируют на сбое Xubuntu?

Я недавно сделал новую ОС, переустанавливают - переключенный от openSUSE до Xubuntu. Я создал резервную копию всех своих научных данных, выполняющих последующую обработку сценарии (записанный в C или в ФОРТРАНЕ). Код я недавно использовал и работал безошибочный над SUSE, дает ошибки, главным образом связанные с выводом символьных данных... помогают!

сообщение об ошибке в качестве примера:

FBDcode.c:144:2: warning: format ‘%s’ expects argument of type ‘char *’,  
                 but argument 3 has type ‘char (*)[100]’ [-Wformat]

строка 144 в моем.c файле:

fscanf(infile_PP, "%s %lf\n", &temp_str, &solvent_molec_wt);

переменная temp_str определяется ранее этим способом:

char temp_str[100];
2
задан 23 January 2013 в 00:53

1 ответ

Почему код генерирует предупреждения

Вы хотите передать temp_str без & amp; , так как массивы по умолчанию передаются по ссылке.

Если вам нужно передать определенный элемент i массива, вы можете передать &temp_str[i] без предупреждений, включая &temp_str[0].

Почему код компилируется в openSUSE, но генерирует предупреждение для Ubunutu

У меня есть оба openSUSE 12.2 и Ubuntu 12.10 на моем компьютере, и я пробовал это несколькими способами. Оба используют gcc 4.7.1.

openSUSE не генерирует предупреждение компилятора, потому что соответствующие предупреждения не включены по умолчанию. Если вы скомпилируете свой код в openSUSE с предупреждениями (чаще всего -Wall), вы увидите то же предупреждение о компиляторе, что и в Ubuntu.

Ubuntu использует dpkg-buildflags для установки настроек по умолчанию. По умолчанию Ubuntu использует -Wformat (который генерирует предупреждение о fscanf и будет включен при использовании -Wall) и -Werror=format-security, что превращает предупреждения из -Wformat-security в ошибки (и не [ 1118] включен в -Wall).

Вы можете просмотреть эти настройки в терминале с помощью dpkg-buildflags --dump и dpkg-buildflags --status.

Что такое предупреждения компилятора?

Кодеры быстро узнают об ошибках компилятора. Когда код содержит опечатки, синтаксические ошибки или компилятор может обнаружить некоторые другие проблемы, компилятор выдает ошибки и останавливается. В этих случаях мы говорим, что код не будет компилироваться.

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

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

В gcc опция командной строки -Wall показывает большинство предупреждений. Опции, начинающиеся с -W, относятся к предупреждениям. Это на странице руководства. В этом случае -Wall показывает все (на самом деле большинство) предупреждений. Очень хорошая идея всегда использовать опцию -Wall. Документация GNU gcc содержит гораздо больше информации о предупреждениях и настройках.

Отличная новая книга, в которой объясняется использование файлов Make и других инструментов для установки параметров компиляции, - 21-й век C от O'Reilly Media, еще одна очень хорошая книга - Autotools от No Starch Нажмите

0
ответ дан 23 January 2013 в 00:53

Другие вопросы по тегам:

Похожие вопросы: