Почему инициализированная переменная не видна после строки комментария? - PullRequest
0 голосов
/ 06 июля 2018

сообщение об ошибке: ошибка: «basicInfo» необъявлена ​​(первое использование в этой функции) basicInfo-> errorlog = malloc (VAL_SZ);

#include <stdio.h>
#include <stdlib.h> //malloc
#include <string.h> //strdup

#define VAL_SZ 64

typedef struct {
    char* errorlog;
    char* cache_size;
    char* cache_replacment;
    int timeout;
} basicInfo_t;

int main(int argc, char* argv[]) {

    //-------------BASIC INFO SETUP-------------\\
    basicInfo_t* basicInfo = malloc(sizeof(basicInfo_t));
    basicInfo->errorlog = malloc(VAL_SZ);
    basicInfo->cache_size = malloc(VAL_SZ);
    basicInfo->cache_replacment = malloc(VAL_SZ);

    return 0;
}

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Вы были слишком умны с форматированием комментариев. Символ обратной косой черты, как последний в исходной строке, делает следующую строку продолжением - обратная косая черта и непосредственно следующий за ней разделитель строки полностью игнорируются. Это происходит очень рано при обработке исходного кода, прежде чем комментарии будут признаны таковыми.

Поскольку предыдущая строка комментария заканчивается обратной косой чертой, строка, в которой вы (хотите) объявить переменную basicInfo, фактически является частью комментария. Следовательно, в действительности нет фактического объявления этой переменной. Просто удалите две обратные косые черты в конце комментария или, возможно, добавьте пустую строку после него.

Кстати, подсветка синтаксиса в моем редакторе объясняет это. Я не знаю о вашем редакторе, но если он не делает то же самое, то вам может помочь более понятный.

0 голосов
/ 06 июля 2018

В своем комментарии вы использовали \\ в конце

//-------------BASIC INFO SETUP-------------\\

Указывает компилятору продолжить оператор на следующей строке. Таким образом, линия

basicInfo_t* basicInfo = malloc(sizeof(basicInfo_t));

на самом деле не виден компилятору (= ​​закомментировано).

Удалите \\ и все должно работать.

...