2016-06-22 39 views
7

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.

+3

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

+3

I tipi di resi mancanti mi riguardano. Questo non è C++ valido. – NathanOliver

+3

Questo non è valido C++. –

risposta

0

Uno scenario in cui si utilizza questo codice potrebbe essere quello di ignorare le funzioni. Queste funzioni contengono un codice predefinito e potrebbero essere sovrascritte in seguito.

+0

È consigliabile quindi utilizzare il file .h per commentare le definizioni fittizie per ottenere invece le definizioni della libreria? – rtmh

+0

Se sono implementati altrove, si. Altrimenti dovresti implementarli tu stesso. – Shiro