2016-04-04 8 views
4

Ich arbeite an einer Hausaufgabe, um verschiedene Seitenersetzungsalgorithmen für meine Betriebssystemklasse zu implementieren. Ein Problem, das ich in laufen lasse, ist, dass ich jeden Algorithmus in einer anderen C-Datei implementieren möchten, und innerhalb jeder einzelnen Datei, verwenden die gleichen Funktionsnamen wie search(), insert(), updatePageTable() usw.Wie man nur eine Funktion aus verschiedenen C-Dateien enthält

Allerdings, wenn ich kompilieren In den Dateien beschwert sich der Compiler über doppelte Symbole. Gibt es eine Möglichkeit, die Haupttestfunktion nur aus jeder anderen Algorithmusdatei zu importieren und diese Funktionen auf ihre Dateifunktionen verweisen zu lassen?

+0

Können Sie versuchen, Ihr echtes Problem zu erklären, anstatt [dieses XY-Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). –

+3

Sie können Funktionen in einer Datei verbergen, indem Sie sie als statisch deklarieren; Das ist eine gute Übung. Sie werden mindestens eine Funktion haben, die nicht so versteckt ist (manchmal wird das 'main()' sein, manchmal wird es eine andere Funktion sein). Wenn die nicht statische Funktion nicht 'main()' ist, sollten Sie einen Header haben, der diese Funktion deklariert. Der Header sollte verwendet werden, wenn die Funktion implementiert wird, um sicherzustellen, dass die Definition mit der Deklaration übereinstimmt, und der Header sollte verwendet werden, wenn die Funktion verwendet wird, um sicherzustellen, dass sie korrekt verwendet wird. –

+0

Beachten Sie, dass ein bestimmtes Programm nur eine extern sichtbare Definition eines bestimmten Funktionsnamens enthalten kann. Das heißt, es kann höchstens eine Datei geben, die eine globale (extern sichtbare) Funktion namens insert() definiert, aber es gibt möglicherweise viele Dateien, die eine statische Funktion namens insert() definieren. Diese Dateien können jedoch nicht referenzieren oder sogar die globale Funktion erklärt haben. –

Antwort

2

Kommentare 1 und 2 in eine Antwort übertragen.

Sie können Funktionen in einer Datei verbergen, indem Sie sie deklarieren static; Das ist eine gute Übung. Sie werden mindestens eine Funktion haben, die nicht so versteckt ist (manchmal wird das main() sein, manchmal wird es eine andere Funktion sein). Wenn die nicht statische Funktion nicht main() ist, sollten Sie eine Überschrift haben, die diese Funktion deklariert. Der Header sollte verwendet werden, wenn die Funktion implementiert wird, um sicherzustellen, dass die Definition mit der Deklaration übereinstimmt, und der Header sollte verwendet werden, wenn die Funktion verwendet wird, um sicherzustellen, dass sie korrekt verwendet wird.

Beachten Sie, dass ein bestimmtes Programm nur eine extern sichtbare Definition eines bestimmten Funktionsnamens enthalten kann. Das heißt, es kann höchstens eine Datei geben, die eine globale (extern sichtbare) Funktion namens insert() definiert, aber möglicherweise gibt es viele Dateien, die eine statische Funktion namens insert() definieren. Diese Dateien können jedoch nicht referenzieren oder deklarieren , die globale Funktion. Eine gegebene Quelldatei kann entweder auf die globale Funktion insert() zugreifen oder sie kann auf ihre eigene statische Funktion insert() zugreifen, aber nicht auf beide.

Verwandte Themen