مشکل در تعریف کتابخانه در زبان سی - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

مشکل در تعریف کتابخانه در زبان سی

0 امتیاز

سلام
دارم سعی می کنم که یک کتابخونه بنویسم (برای اینکه بفهمم لینکر و کامپایلر و سیستم عامل چطور با هم هماهنگ کار می کنن )
کد برنامه رو همینجاگذاشتم

mylib.c : http://paste.ubuntu.com/11866549/

mylib.h : http://paste.ubuntu.com/11866559/

main.c : http://paste.ubuntu.com/11866563/


برنامه درست کار می کنه و اجرا میشه فقط نمی فهمم چرا کامپایلر بهم warning میده!
میشه لطفا یکی از دوستان بررسی و راهنمایی کنه.
ضمنا دوستان اگر جوابی برای سوالی که برام پیش اومده دارید( لینکر و کامپایلر و سیستم عامل چطور با هم هماهنگ کار می کنن ) لطفا دریغ نکنید و حتما بگید. (البته خودم می دونم که خیلی سوال بزرگیه ولی فقط در حد یک پاراگراف هم بگید تا من یک تصویر ذهنی داشته باشم لطف بزرگی می کنید.)
تشکر

 

main.c :

#include<stdio.h>
#include<stdlib.h>
#include"lib/mylib.h"


int main (void)  {
	int aa = 20  ;
	int *a = &aa ;
	int bb = 40  ;
	int *b = &bb ;

	printf( "before assign memory with malloc()\n") ;
	printf    ( "int *a = &aa ;\n" ) ;
	printf    ( "int *b = &bb ;\n\n" ) ;
	addrprint_regu    ( &aa , "aa" ) ;
	addrprint_ptr ( a   , "a"  ) ;
	addrprint_regu    ( &bb , "bb" ) ;
	addrprint_ptr ( b   , "b"  ) ;
	
	a = malloc( 1 * sizeof(int) ) ;
	b = malloc( 1 * sizeof(int) ) ;
	*a= 20 ;
	*b= 40 ;

	printf( "\n\nafter assign memory with malloc()\n" ) ;
	printf( "a = malloc( 1 * sizeof(int) ) ;\nb = malloc( 1 * sizeof(int) ) ;\n*a= 20 ;\n*b= 40 ;\n\n" ) ;
	addrprint_ptr ( a   , "a"  ) ;
	addrprint_ptr ( b   , "b"  ) ;

	free(a) ;
	free(b) ;
	return 0 ; 
}

 

 

mylib.h

void addrprint_ptr ( int *a , char *name  ) ;
void addrprint_regu( int *a , char *name  ) ;

 

 

mylib.c

void addrprint_ptr( int *a , char *name   ) {
	printf ( "%s\tis:\t%p\n"  , name ,  a ) ;
	printf ( "*%s\tis:\t%d\n" , name , *a ) ;
}

void addrprint_regu( int *a , char *name  ) {
	printf ( "%s\tis:\t%d\n"  , name , *a ) ;
	printf ( "&%s\tis:\t%p\n" , name ,  a ) ;
}

 

warning

[13:56 kave ~/dev/problem_SRC/ownlib]$ gcc main.c lib/mylib.c 
lib/mylib.c: In function 'addrprint_ptr':
lib/mylib.c:2:2: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
  printf ( "%s\tis:\t%p\n"  , name ,  a ) ;
  ^
lib/mylib.c:2:2: warning: incompatible implicit declaration of built-in function 'printf'
lib/mylib.c:2:2: note: include '<stdio.h>' or provide a declaration of 'printf'
lib/mylib.c: In function 'addrprint_regu':
lib/mylib.c:7:2: warning: incompatible implicit declaration of built-in function 'printf'
  printf ( "%s\tis:\t%d\n"  , name , *a ) ;
  ^
lib/mylib.c:7:2: note: include '<stdio.h>' or provide a declaration of 'printf'


 

سوال شده تیر 21, 1394  بوسیله ی Kmoh (امتیاز 18)   3 4 5

1 پاسخ

0 امتیاز
کامپایلر سورس های شما را کامپایل کرده و در صورت موفقیت فایل obj برای هر سورسی ساخته میشه .

لینکر مجموعه ی این فایل های آبجکت را گرفته و فایل اجرایی و یا کتابخانه شما را می سازه.

سیستم عامل هم فایل exe و کتابخانه شما را به حافظه انتقال میده تا فایل اجرایی اجرا شده و کتابخانه شما قابل استفاده فایل های اجرایی و کتابخانه های دیگر باشه.
پاسخ داده شده تیر 26, 1394 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
در مورد این وارنینگی(warning) که گذاشتم چیزی متوجه نشدم ،‌شما می دونید معنیش چیه ؟
...