"Семантическая проблема: неявное объявление библиотечной функции 'malloc' с типом ' void *(unsigned long)'"

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

            int nnrp = 1; /* Net number of right parantheses */
            char * pbpe = pcc; /* Pointer to the beginning paranthetical expression */
            for (++pcc; *pcc!= '' && nnrp != 0; ++pcc)
            {
                if (*pcc == '(')
                {
                    ++nnrp;
                }
                else if (*pcc == ')')
                {
                    --nnrp;
                }
                else if (*pcc == '')
                {
                    sprintf(err, "Unbalanced paranthesis");
                    return -1;
                }
            }
            /* If we're here, *pcc is the closing paranathesis of *pbpe */
            long nel = pcc - pbpe; /* New expression length */
            if (nel == 1)
            {
                sprintf(err, "Empty parenthesis");
                return -1;
            }
            char * pe = (char*)malloc(nel+1); /* Paranthetical expression */
            strncpy(pcc+1, pcc, nel);
            pe[nel] = '';

но моя IDE (XCode 6.0) дает мне предупреждение

"семантическая проблема: неявное объявление библиотечной функции 'malloc' с типом ' void *(без знака long)'"

на strncpy(pcc+1, pcc, nel); линии. Мне интересно

  1. почему я получаю это предупреждение.
  2. нужно ли мне это исправить
  3. если есть какие-либо другие проблемы, вы можете видеть в моем коде.

спасибо заранее.

1 ответов


попробуйте добавить эту строку в верхней части файла:

#include <stdlib.h>

это приведет к явному объявлению malloc, поэтому вы не должны получать это предупреждение.

вы, вероятно, получаете предупреждение, потому что забыли включить stdlib.h в вашем файле. Компилятор любезен с вами и дает вам неявное объявление malloc Так что код будет компилироваться. В общем, лучше включить явное объявление, чтобы компилятор действительно знал, что вид функции, которую вы пытаетесь вызвать, и также хорошо исправить все предупреждения, которые вы можете, чтобы ваш процесс сборки был чистым, и вы можете заметить более важные предупреждения. Так что да, вы должны это исправить.