2016-08-15 2 views
0
#include <stdio.h> 
#include <string.h> 
struct students{ 
    char name[50]; 
    int age; 
    int height; 
}; 

int main(int argc, char **argv) 
{ 
    struct students manoj; 

    strcpy(manoj.name, "manojkumar"); 
    manoj.age = 15; 

    displaymanoj(&manoj); //print testing \n , name , age 

    return 0; 
} 

void displaymanoj(struct students *ptr) { 
    printf("Testing...............DEBUG\n"); 
    printf("%s\t%d\n", ptr->name,ptr->age); 
    printf("END OF TEST: SUCESS -manoj-"); 
} 

Я изучаю C, и он работает там, где используется указатель, указывающий на структурную переменную. Я получаю правильный вывод при запуске программы. Просто чтобы моя Geany IDE выдала какое-то сообщение, которое я хотел бы знать, почему.53: 6: предупреждение: конфликтующие типы для функции

My Compiler Сообщение, как показано ниже:

ответ

2

Вы должны объявить функции перед вызовом их.

Так что ваша программа должна выглядеть как

// Includes 
// Structure 

// Function prototype declaration 
// This was what you were missing before 
void displaymanoj(struct students *ptr); 

int main(int argc, char **argv) 
{ 
    ... 
} 

void displaymanoj(struct students *ptr) { 
    ... 
} 
1

Поскольку у вас есть определение displaymanoj() не видно, когда вы вызываете его от main(), компилятор неявно объявляет один с возвращаемым типом int , который вступает в противоречие с фактическим один. Обратите внимание, что неявное объявление было удалено со стандарта C99 и больше не действует.

Чтобы это исправить:

1) Либо переместить функцию displaymanoj() выше основного() 's определение или
2) Выполните forward declaration из displaymanoj().

+0

Да, я исправил это, объявив выше основного. Что на самом деле означает «объявление implcit» – ManojKumar

+0

Мне 16 лет и новичок в программировании c – ManojKumar

+1

Когда вы впервые компилируете функцию, и если она еще не увидела объявление этой функции, то компилятор неявно объявляет один с 'int' как возвращаемым типом. Это называется объявлением неявной функции, поскольку компилятор делает это за вас. Это старое правило, существовавшее до C99. В C99 это правило было удалено, и теперь все функции должны иметь декларации (определения также предоставляют декларации - вот как работает функция над main()). –

Смежные вопросы