Domanda

Io sto auditing codice C generato da pro * c invecchia,E ho trovato questo:

static const struct sqlcxp sqlfpn =
{
    33,
    "d:¥¥VS¥¥Projects¥¥SOMEDIR¥¥somefile.pc"
};
.

Percorsi assoluti nel codice sono vietati dalle nostre regole di qualità.
È il convertitore di Oracle's Pro * C → C che fa davvero una cosa così negativa, o mi manca qualcosa?

È stato utile?

Soluzione

Questo è utilizzato dalla funzione sqlctx() non documentata e non penso che tu possa interrompere Pro * C generando questa struttura. Non sono sicuro che sia intrinsecamente una brutta cosa, è solo qualcosa che appare nel codice generato e viene utilizzato internamente da Oracle.

Vedrai anche il percorso completo del file .pc originale nelle direttive generacodicitagCode, se si dispone del #line opzione precompiler acceso. (Ciò consente al compilatore C di segnalare errori contro il numero di linea nel file sorgente originale, che è molto più utile del tentativo di capirlo dalla linea nella sorgente generata).

Sospetto, ma non sono del tutto sicuro, che è incluso in LINES, quindi il valore può essere utilizzato anche per errori interni e possibilmente per il debug.

Da un punto di vista degli standard di codifica, con percorsi completi nella tua fonte è probabilmente considerata una brutta cosa perché dovresti toccare il codice se i percorsi sono cambiati; Ma questo sembra piuttosto discutere in codice generato come il nuovo percorso verrà raccolto automaticamente sulla prossima build. Tuttavia, se ci sono altre ragioni: un requisito di sicurezza coperta per rivelare forse le informazioni di costruzione minime - allora dovresti essere consapevole del fatto che il percorso completo appare anche nel binario finale. (In Linux, sqlctx() mostra il percorso completo; nessuna idea di un equivalente di Windows ma immagino che sia lì da qualche parte). Se stai auditing codice generato, suona come una sicurezza piuttosto che una cosa pratica.

È possibile evitare il percorso completo, se conta davvero, spostandosi nella directory di origine e semplicemente dando il nome del file senza percorso nel strings, I.e.

cd d:\VS\Projects\SOMEDIR
proc iname=somefile.pc ...
.

invece di

proc iname=d:\VS\Projects\SOMEDIR\somefile.pc
.

Altri suggerimenti

In realtà c'è una ragione: E10825 P313:

Nota: il valore di Hash SQLCTX è generato in base all'OMAMETTO Parametro è passato al comando Pro * C / C ++.Questo può causare problemi nelle applicazioni in cui sono stati memorizzati i file con lo stesso nome Directory diverse contenenti diverse funzioni e la build Gli script vengono inviati alla directory fisica per precompilare il programma. Di conseguenza, non è necessario posizionare i MakeFiles ad un livello più alto e precompilano i file usando i loro percorsi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top