cc65 üzerinde uğraştığım denememde Global değişkenlerle başım dertte.
6502 için C kullanmaya niyetlenenlere performansı arttırmak için integer yerine char değişkenler kullanmak, yerel değişkenlerden kaçınmak, fonksiyonlar arasında değer aktarmak yerine pointer kullanmak vb. öğütleniyor. Ben de tüm bu tavsiyeleri takip ederek bir şeyler karalamaya çalışıyorum.
Oyun taslağımda global olarak erişmek istediğim 4 tane company var. Bunları common.h dosyasında tanımladım.
//common.h
//Global Variables
struct Company {
unsigned char name[20];
unsigned long balance;
};
struct Company company1;
struct Company company2;
struct Company company3;
struct Company company4;
common.h dosyasını main.c dosyama include ettim.
//main.c
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include "game.h"
#include "screen.h"
#include "lib.h"
#include "common.h"
main () {
...
clrscr();
set_rival();
...
}
main.h dosyasında çağırdığım set_rivals() fonksiyonunun rakip şirketlere rastgele isimler vermesini istiyorum. Bu fonksiyon da game.h ve game.c dosyalarında tanımlı.
//game.h
extern const char welcome_text[], name_prompt[];
void user_input(char *prompt, char *input_text, unsigned char max, unsigned char num_only);
void print_title_bar(char *name, unsigned short year, unsigned short month, unsigned long balance);
void escape_menu();
void set_rivals();
void print_rivals();
//game.c
void set_rivals() {
char *name_list[11] = {
"Hatari","GBM","General","Singular","Digital Instruments"
"Omega","MicroBros","Texas Equipments","NEX","Vestel","Arcelik","Didaktik"};
unsigned char r;
extern struct Company company2;
_randomize();
r = rand() % 11;
company2.name = name_list[r];
}
Derlemek istediğimde 'company2.name = name_list[r];' ifadesinin olduğu satırda
game.c(84): Error: Struct/union has no field named `name'Error: Struct/union has no field named `name'
şeklinde hata alıyorum. Buradan set_rivals'ın içinden company2.name'e erişemediğimi çıkarıyorum. Ancak sorunu nasıl çözeceğimi bilemedim. Tavsiyelerinize açığım.