Я хотел бы написать функцию протоколирования низкого уровня, который будет выглядеть так:тест C, если переменная только для чтения раздел
DO_DBG("some string", val1, val2)
То, что я хочу, чтобы это сделать, чтобы хранить указатель строка, а не копия строки, по соображениям производительности. Это предполагает, что строка является литералом только для чтения. Чтобы люди не могли отлаживать отладчик, было бы неплохо, если компилятор мог бы пожаловаться, если первый параметр DO_DBG
был в разделе для записи кода и текста и т. Д. Мне интересно, существует ли механизм для этого. (Я использую gcc 4.9.1, ld 2.24).
Если произвольная ** переменная ** или ** строка литерала ** доступна только для чтения? Стандарт C гарантирует строковые литералы только для чтения.Однако он определяется реализацией, если одинаковые строки хранятся по одному и тому же адресу. – Downvoter
Да, но я хочу, чтобы компилятор отказался от компиляции, если кто-то пытается передать что-либо, кроме строкового литерала, в качестве первого параметра функции. Функция примет параметр 'const char *', и я хочу знать, является ли это литералом ... – John
Это похоже на обход неопределенного поведения и замену его чем-то «более безопасным», например, ошибки времени компиляции. Я не думаю, что это возможно без изменения компилятора/нарушения стандарта C. – Downvoter