为什么在注释行后看不到初始化变量?

时间:2018-07-06 13:10:56

标签: c struct compiler-errors typedef

错误消息是:错误:未声明“ 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 :(得分:1)

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

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

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

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

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

删除\\,它应该可以工作。

答案 1 :(得分:1)

您对注释格式过于机灵。反斜杠字符作为源代码行的最后一个字符使下一行成为延续-完全忽略反斜杠和紧随其后的行终止符。这种情况很早就在源代码处理中发生,之后才被认为是注释。

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

顺便说一句,在我的编辑器中突出显示语法的原因。我不知道您的编辑器,但是如果您的编辑器做的不一样,那么比较聪明的人可能会对您有所帮助。