سلام
دارم سعی می کنم که یک کتابخونه بنویسم (برای اینکه بفهمم لینکر و کامپایلر و سیستم عامل چطور با هم هماهنگ کار می کنن )
کد برنامه رو همینجاگذاشتم
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'