파일에서 func1.c
의 함수를 정의한다고 가정하면 파일 call.c
, 에서 호출하고 싶습니다. 어떻게해야합니까? 미리 감사드립니다!어떻게 하나의 파일에서 C 함수를 정의한 다음 다른 함수에서 호출 할 수 있습니까?
답변
func1.h
파일에 함수에 대한 선언을두고 #include "func1.h"
을 call.c
에 추가합니다. 그런 다음 func1.c
과 call.c
을 함께 컴파일하거나 연결합니다 (자세한 내용은 C 시스템에 따라 다름).
사용하십시오 Forward Declaration
예를 들어
typedef struct
{
int SomeMemberValue;
char* SomeOtherMemberValue;
} SomeStruct;
int SomeReferencedFunction(int someValue, SomeStruct someStructValue);
int SomeFunction()
{
SomeStruct s;
s.SomeMemberValue = 12;
s.SomeOtherMemberValue = "test string";
return SomeReferencedFunction(5, s) > 12;
}
당신이 Header Files라는이 앞으로 선언을 재사용 할 수있는 기능이 있습니다. 간단하게 당신이 전방 선언을 참조하는 각 C 소스 파일에 추가 #include
를 사용 후, 헤더 파일에 배치, 전방 선언을. 물론
/* SomeFunction.c */
#include "SomeReferencedFunction.h"
int SomeFunction()
{
SomeStruct s;
s.SomeMemberValue = 12;
s.SomeOtherMemberValue = "test string";
return SomeReferencedFunction(5, s) > 12;
}
/* SomeReferencedFunction.h */
typedef SomeStruct
{
int SomeMemberValue;
char* SomeOtherMemberValue;
} SomeStruct;
int SomeReferencedFunction(int someValue, SomeStruct someStructValue);
/* SomeReferencedFunction.c */
/* Need to include SomeReferencedFunction.h, so we have the definition for SomeStruct */
#include "SomeReferencedFunction.h"
int SomeReferencedFunction(int someValue, SomeStruct someStructValue)
{
if(someStructValue.SomeOtherMemberValue == NULL)
return 0;
return someValue * 12 + someStructValue.SomeMemberValue;
}
, 두 소스 파일을 컴파일 할 수 있도록, 따라서 전체 라이브러리 또는 실행 가능 프로그램의 경우 두 .c 파일의 출력을 링커 명령 행에 추가하거나 동일한 "프로젝트"(IDE/컴파일러에 따라 다름)에 포함시켜야합니다.
많은 사람들이 필요하다고 생각하지 않더라도 앞으로 선언에 대한 헤더 파일을 만들 것을 제안합니다. 개발자 (또는 다른 사람들)가 코드를 수정하고 함수의 서명을 변경하면 함수가 전달 선언 된 모든 장소를 수정하지 않아도됩니다. 또한 미묘한 버그 나 적어도 컴파일러 오류를 혼동하지 않도록 도와줍니다.
을 고맙게 생각합니다. D –
@Sam H : 메모 동일한 소스 파일에서 전방 선언과 실제 정의를 가질 수 있습니다. 여전히 작동 할 것입니다. 이는 코드 조직 목적에 도움이되므로 사용 순서에 따라 함수를 작성하지 않아도됩니다. 또한 서로 호출하는 두 가지 기능이있을 때 유용합니다. –
- 1. 하나의 실행 파일에서 다른 함수에서 함수를 호출 할 수 있습니까?
- 2. 목표 C, 함수에서 함수를 어떻게 호출 할 수 있습니까?
- 3. 동일한 파일에서 정의한 Perl 패키지를 어떻게 호출 할 수 있습니까?
- 4. 하나의 js 파일을 다른 파일에서 호출 할 수 있습니까?
- 5. C++/lua 함수에서 멤버 함수를 호출 할 수 없습니다.
- 6. C#에서 C++ 함수를 어떻게 호출 할 수 있습니까?
- 7. C 함수에서 Objective-C 메서드를 호출 할 수 있습니까?
- 8. 어떻게 다른 파일에서 뷰 메서드를 호출 할 수 있습니까?
- 9. 다른 PL/Perl 함수에서 PL/Perl 함수를 어떻게 호출 할 수 있습니까?
- 10. 함수에서 호출 된 matplotlib을 어떻게 플롯 할 수 있습니까?
- 11. 다른 아이폰 앱에서 하나의 아이폰 앱을 호출 할 수 있습니까?
- 12. 어떻게 MonoTouch로 자바 스크립트 함수를 호출 할 수 있습니까?
- 13. include 파일이 다른 include 파일의 함수를 호출 할 수 있습니까?
- 14. Git은 실제로 하나의 함수에서 다른 함수로의 이동을 추적 할 수 있습니까? 그렇다면 어떻게?
- 15. R의 다른 함수에서 호출 된 함수에서 변수의 이름을 어떻게 추출합니까?
- 16. JavaScript에서는 함수를 호출 한 버튼을 어떻게 참조 할 수 있습니까?
- 17. 함수에서 저장된 proc를 호출 할 수 있습니까?
- 18. 다른 스레드에서 JS 함수를 호출 할 수 있습니까?
- 19. jquery ui 아코디언을 활성화하거나 비활성화 할 때 어떻게 하나의 함수를 호출 할 수 있습니까?
- 20. 하나의 클래스에서 다른 클래스로 함수를 호출 할 때 문제가 발생했습니다.
- 21. 어떻게 다음 RegExs를 하나의 표현식으로 결합 할 수 있습니까?
- 22. C 함수에서 objective-C 함수를 호출하는 방법
- 23. 리눅스 서버에서 PHP로 C 라이브러리의 함수를 호출 할 수 있습니까?
- 24. SQL Server 트리거로 C# 함수를 호출 할 수 있습니까?
- 25. 다른 정적 함수에서 정적 함수를 호출하는 방법
- 26. .NET에서 MathGL 함수를 호출 할 수 있습니까?
- 27. 어떻게 괄호 표기법을 사용하여 멤버 함수를 호출 할 수 있습니까?
- 28. chrome.tabs.executeScript에서 매개 변수가 contentscript에있는 함수를 어떻게 호출 할 수 있습니까?
- 29. vb.net Sub의 끝에서 javascript 함수를 어떻게 호출 할 수 있습니까?
- 30. C++에서 Ada 함수를 호출 할 수 있습니까?
자바에서 인터페이스가 좋아, C가 Java처럼 만들어 질 수 있다면 더 좋을 것입니다. – anshulkatta
C++/C# – Wreigh