为什么初始化变量在注释行后不可见?

Why initialized variable is not visible after comment line?

错误信息是:error: ‘basicInfo’ undeclared (first use in this function) 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;
}

在您的评论中,您在末尾使用了 \

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

告诉编译器将语句继续到下一行。 因此,行

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

实际上对编译器不可见(= 注释掉)。

删除 \ 它应该可以工作。

你的评论格式太聪明了。反斜杠字符作为源代码行的最后一个字符使下一行成为延续——反斜杠和紧随其后的行终止符将被完全忽略。这发生在源代码处理的早期,在评论被识别之前。

因为前面的注释行以反斜杠结尾,您(打算)声明变量 basicInfo 的行实际上是注释的一部分。因此,确实没有该变量的实际声明。只需删除注释末尾的两个反斜杠,或者在注释后添加一个空行即可。

顺便说一句,我的编辑器中的语法突出显示说明了这一点。我不了解您的编辑器,但如果它的功能不一样,那么更有用的编辑器可能会对您有所帮助。