Interpretacja definicji funkcji, MSVC vs gcc

0

Witam serdecznie

Piszę do Was, ponieważ spotkałem się z dziwnym zdarzeniem. Mój program działa jak chcę, cacy i w ogóle, ale zacząłem go pisać w gcc, a skończyłem w MSVC.
Chodzi o wspomnianą w tytule interpretację definicji funkcji.
Funkcja InsertionSort wywala mi w gcc błąd

error: conflicting types for ‘InsertionSort’
note: previous declaration of ‘InsertionSort’ was here

Natomiast w MSVC tego nie ma
Problem pojawił się, kiedy zmieniłem w definicji funkcji:

float InsertionSort(int *result, int *amount);

na

float InsertionSort(int **result, int *amount);

Oczywiście w obydwu plikach

Czy macie jakiś pomysł jak to wyjaśnić?
Przesyłam kod, chociaż nie wiem, czy cokolwiek pomoże.

Pozdrawiam.

header:

#ifndef HEADER_H

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>


#define LIMIT 10000

int *Random(int *amount);

float ShellSort(int *amount);

float InsertionSort(int **result, int *amount);

#endif // HEADER_H

InsertionSort


#include "header.h"

float InsertionSort(int **result, int *amount)
{
	clock_t start;
	int i, k, temp;
        static unsigned int operations;

	start = clock();

	for (i = 1; i < *amount; i++)
	{
		temp = *result[i];
		for (k = i - 1; k > -1; k--)
		{
			if (temp < *result[k])
			{
				*result[k + 1] = *result[k];
				operations++;
			}
			else
				break;
		}
		*result[++k] = temp;
		operations++;


	}
	start = clock() - start;




	return ((float)start) / CLOCKS_PER_SEC;
}

0

Zmieniałeś niewłaściwą kopię pliku.

0

Nie rozumiem. Zmieniałem w obydwu plikach, header.h oraz InsertionSort.c
Kiedy zmieniałem to samo w definicjach w MSVC tego problemu nie było. W ten sam sposób edytuje inne zmienne. Problem pojawił się dopiero kiedy dostawiłem kolejną gwiazdkę.
Przebudowanie całego projektu też nie dawało rezultatu.

0

Ten header.h co zmieniłeś znajdował się w innym folderze niż InsertionSort.c - cudów nie ma.
gcc nie ma z tym problemów: http://ideone.com/rMyITZ

0

Z ciekawości usunąłem plik header.h.gch, raptem poszło. Ale plik znajdował się w tym samym katalogu. No nic, dzięki za sugestie.
Pozdrawiam

3

Stawiam, że @_13th_Dragon ma rację.
Natomiast... może masz włączone precompiled headers i Ci się nie zregenerowały z jakiegoś powodu? (To by było dziwne, ale...)

4

Jeszcze jedno: masz #ifndef HEADER_H, masz #endif na końcu, ale gdzie jest #define HEADER_H? W obecnej postaci będziesz miał identyczny problem gdy spróbujesz zainkludować ten plik dwukrotnie (drugi raz nie musi być bezpośrednio).

0

@kq, rzeczywiście, zazwyczaj tak robiłem, ale tutaj tego nie ma. Dzięki za zwrócenie uwagi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1