Что делает “неявное объявление функции”, средней?

#include <stdio.h>

int main()
{
    int a = 4;
    int b = 3;
    addNumbers(a, b);
}

int addNumbers(int a, int b)
{
    return a + b;
}

Почему это не компилирует, я получаю сообщение, говоря неявное объявление относительно функции addNumbers()?

18
задан Bo Persson 22 August 2011 в 21:18
поделиться

11 ответов

Объявляйте функцию перед использованием его либо добавлением прототипа перед Main ():

int addNumbers(int a, int b);

или переместите все функционирующие функции перед Main ().

1
ответ дан 30 November 2019 в 06:46
поделиться

Поместите Addnumbers перед Main

int addNumbers(int a, int b)
{
    return a + b;
}

int main()
{
    int a = 4;
    int b = 3;

    addNumbers(a, b);
}

Обновление :

, чтобы распечатать его, Printf («% I», Addnumbers (A, B)); будет отображаться 7 в вышеуказанном деле.

-121--2189386-

либо определяют функцию до MAIN () или обеспечивать его прототип до Main () .

Так что либо делаю это:

#include <stdio.h>

int addNumbers(int a, int b)
{ //definition
}

int main()
{ //Code in main
  addNumbers(a, b);
}

Или это:

#include <stdio.h>

int addNumbers(int, int);
int main()
{ //Code in main
  addNumbers(a, b);
}

int addNumbers(int a, int b)
{ // definition
}
20
ответ дан 30 November 2019 в 06:46
поделиться

Вам необходимо объявить функцию, прежде чем называть ее в Main (). Либо переместить его до основного или, по крайней мере, объявить его там. Кроме того, вы должны добавить вернуть 0 в конце основной функции, поскольку он должен возвращать INT .

#include <stdio.h>

int addNumbers(int a, int b)
{
    return a + b;
}

int main()
{
    int a = 4;
    int b = 3;
    addNumbers(a, b);
    return 0;
}
8
ответ дан 30 November 2019 в 06:46
поделиться

Вы можете переместить всю функцию выше точки ее вызова или использовать прототип функции, например:

#include <stdio.h>

int addNumbers(int a, int b); // function prototype

int main()
{
    int a = 4;
    int b = 3;
    addNumbers(a, b);
}

int addNumbers(int a, int b)
{
    return a + b;
}
2
ответ дан 30 November 2019 в 06:46
поделиться

Я согласен с декларацией и четкостью, но я не получаю никаких ошибок компиляции с вышеуказанным кодом. Моя версия GCC является «4.4.1-4UBUNTU9».

Я сделал небольшую модификацию для проверки кода.

 #include <stdio.h>

int main()
{
    int a = 4;
    int b = 3;
    printf("%d", addNumbers(a, b));   // Printf added.
}

int addNumbers(int a, int b)
{
    return a + b;
}
1
ответ дан 30 November 2019 в 06:46
поделиться

Вам понадобится прямое объявление функции addNumbers или ее определение, сдвинутое вверх перед первым использованием:

// 2161304
#include <stdio.h>

// forward declaration
int addNumbers(int a, int b);

int main()
{
    int a = 4;
    int b = 3;
    addNumbers(a, b);
}

// alternatively move this up before main ...
int addNumbers(int a, int b)
{
    return a + b;
}

Относительно main и return:

Программы будут компилироваться без него. Подписями main, определенными стандартом, являются:

int main(void)
int main(int argc, char **argv)

Есть три переносимых возвращаемых значения:

0, EXIT_SUCCESS, EXIT_FAILURE

, которые определены в stdlib.h.

2
ответ дан 30 November 2019 в 06:46
поделиться

Попробуйте:

$("#myTable").append("<tr><%= escape_javascript( render :partial => name_of_partial ) %></tr>");

И в частичной вы должны иметь:

<td>row1</td>
<td>row2</td>
-121--1040770-

Повторный ответ :

Проверили это на локальном компьютере - не сработало. Поэтому позвольте мне посоветовать использовать PDO до тех пор, пока это не будет улучшено или исправлено:

$dbh = Doctrine_Manager::connection()->getDbh();
$stmt = $dbh->prepare('SELECT DISTINCT(rec.city) FROM <tablename> WHERE rec.state = :state');
$stmt->bindParam(':state', $state);
$stmt->execute();
$result = $stmt->fetchAll();

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

-121--2910320-

Поскольку компилятор выполняет одну строку за другой, к моменту, когда он видит вызов функции, он должен иметь информацию о той функции, которая является основной функцией calling.so мой друг u должен рассказать компилятору о функции, прежде чем вы когда-либо сможете использовать ее.

0
ответ дан 30 November 2019 в 06:46
поделиться

Положите addNumbers перед main

int addNumbers(int a, int b)
{
    return a + b;
}

int main()
{
    int a = 4;
    int b = 3;

    addNumbers(a, b);
}

UPDATE:

Чтобы распечатать его, printintf("%i",addNumbers(a, b)); отобразит 7 в приведенном выше случае.

4
ответ дан 30 November 2019 в 06:46
поделиться

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

int addNumbers(int a, int b);

int main()
{
//    code of main() here
}

int addNumbers(int a, int b)
{
//code of addNumbers() here
}
6
ответ дан 30 November 2019 в 06:46
поделиться

если ваш компилятор является стандартом C99, то он выбрасывает и ошибку "неявное объявление", так как поскольку продвижение по умолчанию устарело в стандарте C99. Если вы попытаетесь скомпилировать компилятор со стандартом C89, это будет допустимо.

В стандарте C99 необходим прототип функции

.
0
ответ дан 30 November 2019 в 06:46
поделиться

Вы должны объявить функцию перед использованием. При работе с функциями помните эти 4 основные части.

  1. Декларация
  2. Звонок
  3. Определение
  4. Возврат
1
ответ дан 30 November 2019 в 06:46
поделиться
Другие вопросы по тегам:

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