programing

gcc를 사용하여 c 프로그램을 컴파일할 때 충돌하는 유형 오류

topblog 2023. 10. 30. 20:28
반응형

gcc를 사용하여 c 프로그램을 컴파일할 때 충돌하는 유형 오류

gcc로 다음 프로그램을 컴파일하려고 했습니다.

0 #include  <stdio.h>
1 
2 main ()
3
4 {    
5  char my_string[] = "hello there";      
6
7  my_print (my_string);    
8  my_print2 (my_string);    
9}
10   
11 void my_print (char *string)
12 {    
13  printf ("The string is %s\n", string);    
14 }
15        
16 void my_print2 (char *string)
17 {
18  char *string2;    
19  int size, i;   
20
21  size = strlen (string);    
22  string2 = (char *) malloc (size + 1);
23
24  for (i = 0; i < size; i++)    
25    string2[size - i] = string[i];
26
27   string2[size+1] = '\0';    
28   printf ("The string printed backward is %s\n", string2);    
29 }

그러나 실패하고 컴파일러는 다음과 같은 오류 로그를 생성합니다.

  1. greeting.c: 11: 오류: 'my_print'에 대한 유형을 conflic 중입니다.
  2. greeting.c: 7: 오류: 'my_print'의 이전 암묵적 선언이 여기에 있었습니다.
  3. greeting.c: 16: 오류: 'my_print2'에 대한 유형을 conflic 중입니다.
  4. greeting.c:8: erroro: 'my_print2'의 이전 암묵적 선언이 있었습니다.

그리고 메인 기능 이전에 my_print와 my_print2 기능을 옮기면 모든 것이 잘 됩니다.그러면 누가 왜 문제가 발생하는지 설명해 줄 수 있습니까?감사합니다!

함수를 선언하지 않고 호출된 후에만 나타나는 경우 자동으로 다음과 같이 가정됩니다.int, 그래서 당신의 경우에는, 당신이 그들을

void my_print (char *);
void my_print2 (char *);

메인으로 호출하기 전에 컴파일러는 그들의 원형이 되는 함수들이 있다고 가정합니다.int my_print2 (char *);그리고.int my_print2 (char *);그리고 리턴 타입 이외에는 동일한 프로토타입으로 2개의 함수를 가질 수 없으므로 오류가 발생합니다.conflicting types.

브라이언이 제안한 대로, 본론을 시작하기 전에 이 두 가지 방법을 선언합니다.

당신은 당신의 기능들을(를) main()

(또는 이전에 기능 프로토타입을 선언합니다.)main())

컴파일러가 보는 바와 같이my_print (my_string);인에main()함수 선언으로서

위로 함수 이동main()파일에 입력하거나 다음을 입력합니다.

void my_print (char *);
void my_print2 (char *);

위에main()파일에

좀 더 일반적인 경우에 대한 답변으로, 일부 내장 라이브러리에서 이미 사용되고 있는 함수 이름을 선택하면 이 오류가 나타납니다.예를 들어 선택합니다.

간단한 방법은 파일을 컴파일하는 동안 컴파일러가 이전 선언을 표시하는 것입니다.

언급URL : https://stackoverflow.com/questions/5691650/conflicting-types-error-when-compiling-c-program-using-gcc

반응형