Jeden element z enum do pliku nagłówkowego

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:

//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");
}
//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
//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;
}

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.

1

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

enum{
    NOF = 5
};

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

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 *));

1 użytkowników online, w tym zalogowanych: 0, gości: 1