小编fsd*_*dfa的帖子

关于" - >"和"."的真实情况.

我一直想知道编译器如何看到指向结构的指针(在C中假设)和结构本身的真正区别.

struct person p;
struct person *pp;
Run Code Online (Sandbox Code Playgroud)

pp->age,我总是想象编译器会这样做:"pp的值+结构中的属性"age"的偏移量".

但它的作用是person.p什么?它几乎是一样的.对我来说,"程序员",p不是内存地址,它就像"结构本身",但当然这不是编译器如何处理它.

我的猜测是它更像是一种语法,而编译器总是如此(&p)->age.

我是对的?

c compiler-construction struct

16
推荐指数
2
解决办法
581
查看次数

永远重建

我的Makefile是:

OBJS = b.o c.o a.o
FLAGS = -Wall -Werror
CC = gcc

test: $(OBJS)
    $(CC) $(FLAGS) $(OBJS) -o test
b.o: b.c b.h
    $(CC) $(FLAGS) -c b.c
a.o: a.c b.h c.h
    $(CC) $(FLAGS) -c a.c
c.o: c.c c.h
    $(CC) $(FLAGS) -c c.c
clean:
    rm a
    rm *.o
all: test
Run Code Online (Sandbox Code Playgroud)

如果我make再这样做make,它总是重建'测试'.为什么这样做?

即使我这样做:make a.o它重建...如果有帮助的话我会在Linux上.

在Windows中,如果我通过'test.exe'更改'test','-o test''更改'-o test',它可以正常工作.所以我想由于某些原因,我的linux中的'make'无法检查目录中我的文件的日期戳.

我修好了它!.c是在Windows中创建的.我在vi中打开了所有的.c和.h,没有做任何事情保存更改,一切正常.我认为日期戳是固定的.

makefile

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

自动需要的课程?

假设我有一个A类和一个B类.

A的.h需要B的.h,B的.h需要A.的A.h(需要= #include).

所有.h都有警卫:

#ifndef _classX_
#define _classX_
...
...
#endif
Run Code Online (Sandbox Code Playgroud)

但是如果我编译A的.cpp,那么当它包含B的.h时,B类不能包含A类的.h,因为A类已经使用了守护.

我怎么解决这个问题?

c++ class include guard

0
推荐指数
1
解决办法
106
查看次数

标签 统计

c ×1

c++ ×1

class ×1

compiler-construction ×1

guard ×1

include ×1

makefile ×1

struct ×1