Jeden element z enum do pliku nagłówkowego

Jeden element z enum do pliku nagłówkowego
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
0

Witajcie. Otóż mam w biblioteka.c zadeklarowane indeksy za pomocą enum, ale jeden elemencik przydałby mi się też w biblioteka.h. Mogłabym przenieść całe to enum do biblioteka.h, ale wtedy wszystkie stałe będą widoczne też w main.c (wszędzie gdzie includuje to biblioteka.h) a tego bym nie chciała. Jest coś takiego w ogóle możliwe żeby wziąć tylko ten jeden element? Pokażę na przykładzie konkretnie chodzi mi o rozmiar tablicy w taki sposób:

Kopiuj
//biblioteka.c
#include "biblioteka.h"
enum marks_index {
	MATH=0,
	CHEMISTRY=1,
	BIOLOGY=2,
	NOF_MARKS
};
void costam() {
	printf("calej zawartosci nie bd wklejac\n");
}
Kopiuj
//biblioteka.h
#ifndef BIBLIOTEKA_H_
#define BIBLIOTEKA_H_
typedef struct {
	char		*name;
	int		class;
	char		*marks[NOF_MARKS] //tutaj błąd nie widzi NOF_MARKS
} student_t;
#endif
Kopiuj
//main.c
#include <stdio.h>
#include <stdlib.h>
#include "biblioteka.h"

int main(void) {
printf("%d\n",MATH); //nie chce żeby te stałe były tutaj widoczne w main i coś takiego było możliwe
printf("%d\n",NOF_MARKS); //no to może ewentualnie jedno być
return 0;
}


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
_13th_Dragon
Nie rób tego =0, =1 itp, bo mija się to z celem.
KA
a jak ktoś zmieni kolejność w enumie? wtedy bez tych =0 =1 przestaje działać. ma być idioto-odporny kod :)
_13th_Dragon
Jak ktoś będzie to robił bez mózgu to może np dodać w środku GEOGRAFY=99, i też wszystko szlak trafia.
KA
no w sumie tak :} . ok dzięki
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:8 dni
1

A jak ty sobie wyobrażasz że coś jest znane w biblioteka.h zaś tam gdzie dołączasz biblioteka.h jest już nie widoczne?
Nie ma takiej możliwości, przenieś do biblioteka.h i nie udziwniaj.
Jak martwi cię przestrzeń nazw to możesz zrobić specjalny namespace dla tego (o ile możesz użyć C++)
Jak nie, to daj dłuższe nazwy (MARKS_MATH) i tyle.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
_13th_Dragon
Zgadza się, brak namespace. Poprawiłem.
spartanPAGE
  • Rejestracja:około 12 lat
  • Ostatnio:7 dni
1

Różnicy dużej chyba nie ma, skoro i tak nie odwołujesz się przez konkretną nazwę

Kopiuj
enum{
    NOF = 5
};

int main(void){
    int x[NOF];
    return 0;
}

vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

Ładnie użyty ten NOF_MARKS - służy do automatycznego śledzenia liczby elementów w wyliczeniu.

Nie możesz ukryć tej stałej, o ile chcesz używać sizeof(marks).
Jeśli nie chcesz, to możesz rozszerzyć strukturę tak:

typedef struct {
char *name;
int class;
char **marks;
size_t marks_size; // liczba elementów w marks
} student_t;

Ale wtedy będzie trzeba alokować dynamicznie marks.

w biblioteka.c:

marks = calloc(NOF_MARKS, sizeof(char *));

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.