CI에서 컴파일 할 때 헤더 파일에서 가져 오기 오류가 발생합니다.

안토니오 갈반

프로젝트를 컴파일 할 때 다음 오류가 발생합니다.

./PC.h:15:12: error: unknown type name 'InstructionMemory'
PC *new_pc(InstructionMemory *memoria);
           ^
./PC.h:17:1: error: unknown type name 'InstructionMemory'
InstructionMemory *get_memory(PC *programCounter);
^
2 errors generated.
In file included from main.c:5:
./InstructionRegister.h:7:36: error: unknown type name 'BankRegister'
int opera(InstructionRegister *IR, BankRegister *bank);

하지만 이건 말이 안 돼요. 파일을 보면 헤더 파일이기 때문에 #include를 헤더 파일에 사용할 수 없다는 것을 알고 있습니다. 그래서 나는 내가 뭘 잘못하고 있는지 모른다.

내 PC.h 파일의 내용이 있습니다.

typedef struct PC PC;
PC *new_pc(InstructionMemory *memoria);
int getpc(PC *programCounter);
InstructionMemory *get_memory(PC *programCounter);
char *fecth(PC *programCounter);
char *linea_actual(PC *programCounter);

다음 메이크 파일을 사용하여 컴파일합니다.

CC = gcc
CFLAGS=-I
DEPS = ALU.h InstructionRegister.h Rebasing.h BankRegister.h MemoryInstruction.h ControlUnit.h PC.h

run: exect
    ./exect $(EX)

%.o: %.c $(DEPS)
    $(CC) -c $< $(CFLAGS)

exect: ALU.c InstructionRegister.c Rebasing.c BankRegister.c MemoryInstruction.c main.c ControlUnit.c PC.c
    gcc -o exect InstructionRegister.c Rebasing.c BankRegister.c MemoryInstruction.c main.c ControlUnit.c PC.c -I.


clean:
    rm -f *.o
바실 스타린 케 비치

그래서 나는 당신이 #include헤더 파일에 사용할 수 없다는 것을 알고 있습니다.

당신은 착각합니다. 헤더 파일에 몇 가지 include 지시문사용할 수 있으며 자주 사용해야하며 원할 수도 있습니다.

일반적인 작은 C 프로젝트 (예 : 총 10 만 줄 미만의 C 코드)는 종종 하나의 공통 헤더 파일을 가질 것입니다 . 예를 들어 myheader.h일반적으로 include 가드로 시작 하고 여러 시스템이 포함합니다.

#ifndef MYHEADER_INCLUDED
#define MYHEADER_INCLUDED

// some system includes
#include <stdio.h>
#include <stdlib.h>

/// your type declarations
enum foo_en { /* blablabla */ };
struct bar_st { /* blablabla */ };
typedef struct bar_st Bar;
/* etc... */

/// your global functions 
extern int myglobfun(int, int);
/* etc...*/

/// your global variables (have only a few of them)
extern Bar*my_bar;
/* etc... */

#endif /*MYHEADER_INCLUDED*/

이것은 프로젝트를 구성 할 수있는 하나의 가능성 일뿐입니다. 어떤 사람들은 #include모든 번역 단위 (예 : C 소스 파일)에서 자신의 일부 헤더 앞에 많은 헤더 파일과 명시 적으로 시스템 헤더 를 갖는 것을 선호합니다 .

단일 공통 헤더를 갖는 이점은는 Makefile코딩이 간단하고 공통 헤더를 미리 컴파일 할 수도 있다는 것 입니다. 단점은 struct헤더의 모든 변경 (예 : 공통 필드 추가 )이 make모든 것을 다시 컴파일 해야한다는 것입니다 (작은 프로젝트의 경우 큰 문제가 아님).

또는 많은 헤더 파일을 가질 수 있습니다. 그런 다음 포함 가드 (단일 공통 헤더의 경우 실제로 쓸모가 없지만 해를 끼치 지 않음)를 사용하고 다중 포함과 관련된 규칙을 정의해야합니다. 종종 헤더 파일 자체에 다른 필요한 헤더 파일이 포함되거나 포함되었는지 확인합니다.

 // file "myheaderone.h"
 #ifndef MYHEADERONE_INCLUDED

 // check that "myotherheader.h" has been included
 #ifndef MYOTHERHEADER_INCLUDED
 #error myotherheader.h should have been #include-d
 #endif

 //// etc

또는 #include "myotherheader.h"시작 부분에 코드를 작성할 수 있습니다.myfirstheader.h

여러 헤더가있는 경우, 당신은 복잡한 필요 Makefile참조하면 오히려 종속성을 생성 할 수 있습니다 . 그것은 좋아 하고 친구 위해 몇 가지 전 처리기 옵션사용합니다 .gcc-M

BTW, 당신 Makefile은 틀 렸습니다. 하드 코딩하지 말고를 cc사용 $(CC)하십시오. 있는지 물어 GCC를 모든 경고 및 디버그 정보 (예에 대한 CFLAGS= -Wall -g). GNU 메이크에 대해 알아 규칙의 카탈로그를 실행하여 make -p. 그리고 당신은 CFLAGS= -I정말 잘못된 것입니다, 당신은 할 수 있습니다 CFLAGS= -I. -Wall -g부터 -I해야한다 항상 디렉토리 뒤에는.

추신. 사용 gcc하는 경우 항상-Wall 그것을 전달 하는 습관을 들이십시오. 매우 자주 (그리고 확실히 당신의 경우) 당신은 또한 원합니다 -Wextra(더 많은 경고를 받고 싶습니다 . 컴파일러 경고는 당신의 친구이며 당신이 그들 중 하나도 없을 때까지 코드를 개선해야 함을 기억하십시오) 그리고 아마도 -g( -g디버거 를 사용할 수 있으려면 ) . 벤치마킹을 위해 컴파일러에게 최적화를 요청하십시오 (예 : -O1또는 사용 -O2 -mcpu=native).

-H전 처리기 옵션유의gcc 하십시오. 포함 된 모든 파일을 표시하도록 요청 합니다. 때로는 (예를 들어, 일부 불쾌한 매크로를 디버깅하기 위해) 번역 단위의 전처리 된 형태를보고 싶을 때 사용 gcc -C -E하십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

셰이더를 컴파일 할 때 PyOpengGL에서 오류가 발생합니다.

분류에서Dev

Objective-C 헤더 파일에서 C ++ 헤더 파일을 포함 할 때 컴파일 오류가 있습니다. iostream을 찾을 수 없습니다.

분류에서Dev

다른 폴더에서 내 C ++ 프로그램을 컴파일 할 때 실행 파일에서 분할 오류가 발생합니다.

분류에서Dev

헤더 파일의 QList 선언으로 인해 소스 파일에서 분할 오류가 발생합니다.

분류에서Dev

c에서 strlcpy 함수를 사용할 때 컴파일러에서 오류가 발생합니다.

분류에서Dev

헤더 파일은 여러 번 컴파일되고 첫 번째 컴파일 후 모든 컴파일에서 임의의 오류가 발생합니다.

분류에서Dev

Android에서 릴리스하기 위해 컴파일하려고 할 때 왜 오류가 발생합니까?

분류에서Dev

컴파일 할 때 "기본에 정의되지 않은 참조"GCJ이 오류가 발생합니다

분류에서Dev

헤더 파일을 가져와 사용하려고 할 때 C에서 분할 오류

분류에서Dev

Android Studio에서 Cocos 2d-x 프로젝트를 컴파일 할 때 오류가 발생했습니다.

분류에서Dev

정적 파일에서 json을로드 할 때 오류가 발생합니까?

분류에서Dev

내 저장소에 파일을 추가하려고 할 때 Git에서 readlink 오류가 발생합니다.

분류에서Dev

Array.Equals ()를 사용할 때 컴파일 오류가 발생합니다.

분류에서Dev

컴파일 할 때 브로콜리 오류가 발생합니다.

분류에서Dev

GCC로 게임을 컴파일 할 때 오류가 발생합니다. (오류 : "class Screen"[-fpermissive]에서 "Screen"의 의미 변경)

분류에서Dev

다른 컴파일이 아닌 jhipster에 대해서만 브라우저 콘솔에 webpack 서버를 핫 리로드 할 때 Angular 오류가 발생합니다.

분류에서Dev

tar에서 파일을 추출 할 때 오류가 발생 함

분류에서Dev

OpenCover에서 mstest를 실행할 때 .vsmdi.trx 파일과 관련된 오류가 발생합니다.

분류에서Dev

내 웹 사이트에서 파일을 업로드 할 때이 오류가 발생합니다.

분류에서Dev

python urllib로 URL에서 파일을 검색 할 때 Errno 소켓 오류가 발생합니다.

분류에서Dev

터미널에서 jar 파일을 실행할 때 오류가 발생합니다.

분류에서Dev

컴파일 된 typescript를 람다에 배포 할 때 모듈 가져 오기 오류

분류에서Dev

WebP 파일 헤더에서 파일 크기 가져 오기

분류에서Dev

LAMP 설정에서 더 큰 파일을 업로드 할 때 "페이로드가 너무 큼"오류가 발생합니다.

분류에서Dev

PostgreSQL db 백업을 복원 할 수 없습니다. "pg_restore : [archiver] 파일 헤더에서 지원되지 않는 버전 (1.13)"오류가 발생합니다.

분류에서Dev

Kahan 합계 알고리즘은 GCC에서 컴파일 할 때 큰 컴퓨팅 오류가 있습니다.

분류에서Dev

내 파이썬 스크립트에서 다른 파이썬 함수를 호출 할 때 가져 오기 오류가 발생합니다.

분류에서Dev

devc ++에서 코드를 컴파일 할 때이 오류가 발생하는 이유는 무엇입니까?

분류에서Dev

Visual C ++ 2010 컴파일러로 code :: block에서 위젯 라이브러리를 사용할 때 오류가 발생합니다.

Related 관련 기사

  1. 1

    셰이더를 컴파일 할 때 PyOpengGL에서 오류가 발생합니다.

  2. 2

    Objective-C 헤더 파일에서 C ++ 헤더 파일을 포함 할 때 컴파일 오류가 있습니다. iostream을 찾을 수 없습니다.

  3. 3

    다른 폴더에서 내 C ++ 프로그램을 컴파일 할 때 실행 파일에서 분할 오류가 발생합니다.

  4. 4

    헤더 파일의 QList 선언으로 인해 소스 파일에서 분할 오류가 발생합니다.

  5. 5

    c에서 strlcpy 함수를 사용할 때 컴파일러에서 오류가 발생합니다.

  6. 6

    헤더 파일은 여러 번 컴파일되고 첫 번째 컴파일 후 모든 컴파일에서 임의의 오류가 발생합니다.

  7. 7

    Android에서 릴리스하기 위해 컴파일하려고 할 때 왜 오류가 발생합니까?

  8. 8

    컴파일 할 때 "기본에 정의되지 않은 참조"GCJ이 오류가 발생합니다

  9. 9

    헤더 파일을 가져와 사용하려고 할 때 C에서 분할 오류

  10. 10

    Android Studio에서 Cocos 2d-x 프로젝트를 컴파일 할 때 오류가 발생했습니다.

  11. 11

    정적 파일에서 json을로드 할 때 오류가 발생합니까?

  12. 12

    내 저장소에 파일을 추가하려고 할 때 Git에서 readlink 오류가 발생합니다.

  13. 13

    Array.Equals ()를 사용할 때 컴파일 오류가 발생합니다.

  14. 14

    컴파일 할 때 브로콜리 오류가 발생합니다.

  15. 15

    GCC로 게임을 컴파일 할 때 오류가 발생합니다. (오류 : "class Screen"[-fpermissive]에서 "Screen"의 의미 변경)

  16. 16

    다른 컴파일이 아닌 jhipster에 대해서만 브라우저 콘솔에 webpack 서버를 핫 리로드 할 때 Angular 오류가 발생합니다.

  17. 17

    tar에서 파일을 추출 할 때 오류가 발생 함

  18. 18

    OpenCover에서 mstest를 실행할 때 .vsmdi.trx 파일과 관련된 오류가 발생합니다.

  19. 19

    내 웹 사이트에서 파일을 업로드 할 때이 오류가 발생합니다.

  20. 20

    python urllib로 URL에서 파일을 검색 할 때 Errno 소켓 오류가 발생합니다.

  21. 21

    터미널에서 jar 파일을 실행할 때 오류가 발생합니다.

  22. 22

    컴파일 된 typescript를 람다에 배포 할 때 모듈 가져 오기 오류

  23. 23

    WebP 파일 헤더에서 파일 크기 가져 오기

  24. 24

    LAMP 설정에서 더 큰 파일을 업로드 할 때 "페이로드가 너무 큼"오류가 발생합니다.

  25. 25

    PostgreSQL db 백업을 복원 할 수 없습니다. "pg_restore : [archiver] 파일 헤더에서 지원되지 않는 버전 (1.13)"오류가 발생합니다.

  26. 26

    Kahan 합계 알고리즘은 GCC에서 컴파일 할 때 큰 컴퓨팅 오류가 있습니다.

  27. 27

    내 파이썬 스크립트에서 다른 파이썬 함수를 호출 할 때 가져 오기 오류가 발생합니다.

  28. 28

    devc ++에서 코드를 컴파일 할 때이 오류가 발생하는 이유는 무엇입니까?

  29. 29

    Visual C ++ 2010 컴파일러로 code :: block에서 위젯 라이브러리를 사용할 때 오류가 발생합니다.

뜨겁다태그

보관