相关疑难解决方法(0)

命名包括警卫

C++如何包含通常命名的守卫?我倾向于看到这么多:

#ifndef FOO_H
#define FOO_H

// ...

#endif
Run Code Online (Sandbox Code Playgroud)

但是,我认为这不是很直观.如果没有看到文件名,就很难分辨出它的含义FOO_H和名称所指的含义.

什么是最佳做法?

c++ include-guards c-preprocessor

22
推荐指数
4
解决办法
1万
查看次数

.h文件中的重新定义错误

//list.h file
typedef struct _lnode{
    struct _lnode *next;
    size_t row;
    size_t column;
    short data;
}lnode;

typedef struct _llist{
    struct _lnode *head;
    size_t size;

}llist;

//matrix.h file
typedef struct _matrix{

    size_t width;
    size_t height;
    size_t k;

    int **data;

}matrix;

//smatrix.h file
#include "list.h"
#include "matrix.h"

typedef struct _smatrix{
    size_t width;
    size_t height;
    size_t k;

    llist data;
}smatrix;

smatrix* make_smatrix(matrix *m);
Run Code Online (Sandbox Code Playgroud)

smatrix.h文件包含list.h文件和matrix.h文件.如果我在smatrix.h文件中包含这些头文件,那么我得到

 redefinition of 'lnode'. redefinition of '_llist' and redefinition of '_matrix' errors.
Run Code Online (Sandbox Code Playgroud)

如果我从smatrix.h文件中获取了那些heder文件,那么错误就会消失,但它会在函数参数中抱怨矩阵类型.我想调用list.h中定义的函数和smatrix.c文件中的matrix.h文件.我该怎么办?提前致谢..

c

8
推荐指数
2
解决办法
4万
查看次数

标签 统计

c ×1

c++ ×1

c-preprocessor ×1

include-guards ×1