PDA

View Full Version : سوال: struct در سی



storm_saeed
چهارشنبه 13 آذر 1392, 22:53 عصر
سلام دوستان
من یه برنامه دارم شامل main.c ,lib.h و lib.c ,foo.c وfoo.h
حالا من میخام مثلا یه
struct point{
int x;
{
بعد یه point a;
ای تعریف کنم که گلوبال باشه و در تمام فایل هام بتونم ازش استفاده کنم ومن میخوام اینا همش تو lib.h تعریف بشه یه مقدار اولیه داده بشه بهشون بعد بمرور که برنامه ران میشه و مقدار a.x تغییر میکنه یه تابعی تو foo.c بنویسم که طبق این عدد تغییر یافته یه کارایی کنه .
اگه میشه کمکم کنید ممنون ( خودم یه چیزی نوشتم ولی ارور میداد)

rahnema1
پنج شنبه 14 آذر 1392, 07:28 صبح
سلام
این جوری میشه انجام داد دستور کامپایل و لینک هم زیرش گذاشتم


//lib.h======================
#ifndef __LIB_H
#define __LIB_H
typedef struct point{
int x;
}point;
extern point a;
#endif
//foo.h===================
#ifndef __FOO_H
#define __FOO_H
int tabe(point a);
#endif
//foo.c==================
#include "lib.h"
int tabe(point a)
{
return a.x+3;
}
//main.c==================
#include <stdio.h>
#include "lib.h"
#include "foo.h"
point a={.x=1};
int main(){
printf("salam%d\n",a.x=a.x+5);
printf("salam%d\n",tabe(a));
}






gcc.exe -c lib.c -o lib.o -I"include" -I"./"
gcc.exe -c foo.c -o foo.o -I"include" -I"./"
gcc.exe -c main.c -o main.o -I"include" -I"./"
gcc.exe lib.o foo.o main.o -o "strct.exe" -L"lib" -s

storm_saeed
پنج شنبه 14 آذر 1392, 10:48 صبح
ممنون حالا یه چیز دیگه فرض کنید
حالا من میخوام یه متغیر x,y تعریف کنم که مقدار جفتشون مثلا 1 باشه و مقدارشون هم تغییر نمیکنه . میخوام این دوتا x,y رو در یه .h ای تعریف کنم و از اون ها در main.c و foo.c استفاده کنم
موقعی که میزنم


//lib.h======================
#ifndef __LIB_H
#define __LIB_H
int a=5;
int b=5;
#endif
بعد این رو در main اد میکنم خب میتونم استفاده کنم ولی مثلا تو foo.c اد میکنم و یه تابع func() هم باشه که فقط x رو پرینت کنه میگه
:multiple definition of `x'
حالا باید چیکار کنم که بتونم ازشون استفاده کنم؟

rahnema1
پنج شنبه 14 آذر 1392, 11:14 صبح
اگه ثابت باشند


//lib.h======================
#ifndef __LIB_H
#define __LIB_H
const int a=5;
const int b=5;
#endif

این منبع اطلاعات خیلی خوبی داره:www.hlnum.org/publications/cppscicomp.pdf

storm_saeed
پنج شنبه 14 آذر 1392, 11:54 صبح
define ham tarif kardam baz hamon error ro dad

omidshaman
پنج شنبه 14 آذر 1392, 14:55 عصر
از extern استفاده کن

rahnema1
پنج شنبه 14 آذر 1392, 19:21 عصر
define ham tarif kardam baz hamon error ro dad
لطفا کدی که نوشتی را بذار

storm_saeed
پنج شنبه 14 آذر 1392, 20:27 عصر
ممنون درست شد
extern تعریفش کردم تو .h بعد تو یه جا بهشون مقدار دادم حالا دیگه تو همه فایل ها قابل دسترسی هست