Почему gcc сообщает “о неявном объявлении функции 'вокруг'”?

Вы пробовали float: left на Вашем <li/>? Что-то вроде этого:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
    <style type="text/css">
        ul li {
            float: left;
            margin-left: 2em;
        }
    </style>
</head>
<body>
    <ul>
        <li>test</li>
        <li>test2</li>
    </ul>
</body>
</html>

я только протестировал Firefox 3.0.1, работы там. Эти margin установлен, потому что еще Ваш маркер перекрывает предыдущий объект.

дополнение: Будьте осторожны, что при плавании объектов Вы удаляете их из нормального потока, который в свою очередь заставляет <ul/> не иметь никакой высоты. Если Вы захотите добавить границу или что-то, Вы станете странными результаты.

Один способ зафиксировать, который должен добавить следующее к Вашим стилям:

ul {
    overflow: auto;
    background: #f0f;
}
8
задан Tim Martin 23 November 2009 в 15:30
поделиться

6 ответов

Я вижу, вы используете gcc.

По умолчанию gcc использует стандарт, аналогичный C89. Вы можете «заставить» его использовать стандарт C99 (части, которым он соответствует)

gcc -std=c99 -pedantic ...

Цитата из Руководства GCC

По умолчанию GCC предоставляет некоторые расширения языка C, которые в редких случаях конфликт с C стандарт. Смотрите Расширения до C Языковая семья. Использование -std перечисленные выше параметры отключат эти расширения, где они конфликтуют с выбранной стандартной версией C. Вы также можете выбрать расширенный версия языка C явно с -std = gnu89 (для C89 с GNU расширения) или -std = gnu99 (для C99 с расширениями GNU). По умолчанию, если нет вариантов диалекта языка C задано -std = gnu89; это изменится to -std = gnu99 в будущем выпуске когда поддержка C99 будет завершена. Некоторые функции, которые являются частью C99 стандартные принимаются как расширения в Режим C89.

17
ответ дан 5 December 2019 в 07:58
поделиться

Что-то не так с вашей установкой gcc, системными заголовками или параметрами компиляции.

Попробуйте скомпилировать с -E. Это покажет вам, что выводит препроцессор, в том числе какие заголовки включены и что в них есть. В моей системе Ubuntu Linux это около 1000 строк вывода, включая следующее:

extern double round (double __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__));
3
ответ дан 5 December 2019 в 07:58
поделиться

Вам нужно сообщить gcc, что вам нужен C99 и что вы хотите связать его в libm:

gcc -std=c99 -lm round_test.c
3
ответ дан 5 December 2019 в 07:58
поделиться

Код, который вы вводите, полностью компилируется в MacOS X 10.5.8 с GCC 4.0.1. Если указать параметры '-Wall -Wextra', он выдает жалобы на неиспользуемые параметры argc и argv - not material.

Вы просматривали на своей машине?

Вы пробовали с такими параметрами, как '-stc = c99'?

0
ответ дан 5 December 2019 в 07:58
поделиться

вам необходимо связать с математической библиотекой. Поэтому при компиляции не забудьте добавить флаг -lm .

-2
ответ дан 5 December 2019 в 07:58
поделиться

C99 был ответом, но полная история немного сложнее. Причина, по которой я вообще играл с этим, заключалась в том, что я пытался скомпилировать библиотеку, написанную для Windows, которая имела свое собственное «оптимизированное» определение round (). Я получил ошибку компоновщика, сообщающую мне, что определение противоречит встроенному, поэтому я удалил определение (и объявление). Как только я это сделал, я начал получать «ошибку неявного объявления».

Кажется, что режим компиляции по умолчанию (без флага -std = c99) не соответствует ни C89, ни C99: если он соответствует C89, вы должен иметь возможность предоставить пользовательское определение round () без конфликтов, и если оно соответствует C99, объявление должно быть в math.h.

0
ответ дан 5 December 2019 в 07:58
поделиться
Другие вопросы по тегам:

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