Attualmente sto lavorando a un progetto con un vecchio codice scarsamente documentato e sto cercando di navigare tra i vari file .h di aver fornito una documentazione completa sull'uso di tutte le funzioni contenute (le definizioni sono contenute nei file .lib e .dll). Uno dei file .h ha funzioni sono non solo dichiarati, ma definite sia con semplici istruzioni return o dichiarazioni vuote in quanto taliMotivo per "{return 0;}" o "{;}" nel file .h della libreria
class DLL ExampleLibraryClass {
public:
int exampleGetValue() {return 0;}
void exampleSetValue(Type val) {;}
void exampleActionFxn() {;}
};
Queste sarebbero le funzioni che mi aspetto di tornare stati variabile corrente o eseguire determinate azioni, ed è per questo che questo mi imbarazza.
Inoltre:
Ho usato Dependency Walker e trovato che ogni funzione ha un definizione corrispondente in un DLL.
Chiave DLL è stata definita con
#ifndef _PWSDLL_ # define _PWSDLL_ # define WINCALL _stdcall # ifdef _USRDLL # define DLL __declspec(dllexport) # else # define DLL __declspec(dllimport) # endif #endif
_USRDLL non è definito e quindi
DLL
è definito come__declspec(dllimport)
Domande ruota meno l'effetto apparente delle definizioni vuote (che non fanno nulla, suppongo, e sono già stati discussi su SO) e altro sul perché il file .h è stato scritto in questo modo e come utilizzare il file. È una pratica comune o conosciuta? Il linker continuerà a cercare definizioni della funzione nelle mie librerie collegate? Ci sono altri pezzi di codice che dovrei cercare per altri indizi? O forse nel senso più ampio, come dovrei rispondere a questo?
Molte grazie, e per favore fatemi sapere se avete bisogno di ulteriori informazioni per affrontare questo, non sono sicuro di cosa sia esattamente importante in questa materia.
MODIFICA: Aggiunti tipi di reso dimenticati nel codice di esempio.
MODIFICA: Aggiunta nota sulla definizione DLL.
Sei sicuro che l'intestazione sia sempre consumata in questo modo, in ogni scenario di compilazione? Potrebbe esserci qualche compilazione condizionale al lavoro, che rende la classe una "classe fittizia" in determinate condizioni. – KABoissonneault
I tipi di resi mancanti mi riguardano. Questo non è C++ valido. – NathanOliver
Questo non è valido C++. –