mi piacerebbe scrivere una funzione di registrazione di basso livello che sarebbe simile:prova C se variabile è in sola lettura sezione
DO_DBG("some string", val1, val2)
Quello che voglio fare, è quello di memorizzare il puntatore la stringa piuttosto che una copia della stringa, per motivi di prestazioni. Ciò presuppone che la stringa sia un valore letterale di sola lettura. Per evitare che le persone debbano eseguire il debug del debugger, sarebbe bello se il compilatore potesse lamentarsi se il primo parametro di DO_DBG
si trovava in una sezione scrivibile di codice vs testo, ecc. Mi chiedo se esiste un meccanismo per farlo. (Sto usando gcc 4.9.1, ld 2.24).
Se una variabile ** arbitraria o ** stringa letterale ** è di sola lettura? Lo standard C garantisce che i valori letterali stringa siano di sola lettura.Tuttavia, è definito dall'implementazione se stringhe uguali sono memorizzate allo stesso indirizzo. – Downvoter
Sì, ma voglio che il compilatore fallisca la compilazione se qualcuno tenta di passare qualsiasi cosa tranne una stringa letterale come primo parametro della funzione. La funzione prenderebbe un parametro 'const char *' e voglio sapere se si tratta di un valore letterale ... – John
Sembra che aggiri un comportamento indefinito e lo sostituisca con qualcosa di "più sicuro" come errori di compilazione del tempo. Non penso sia possibile senza modificare il compilatore/rompendo lo standard C. – Downvoter