URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9508
[ Назад ]

Исходное сообщение
"conflict types в заголовочном файле и в С"

Отправлено greenetc , 11-Июл-12 17:12 
понадобилось старый проект скомпилить под новую систему.
в файле rsa.h

==============
#include <stdio.h>

/* ************************************************** */
/* Please modify this value to suit your application */
#define MAXBITS 128
/* Remove the following line to use a pure C version*/
// #define ANSIC
/* ************************************************** */

//typedef xdata unsigned char DIGIT_T ;
//typedef xdata unsigned long bdigit_t;
//typedef xdata unsigned int size_t_;

typedef unsigned char DIGIT_T ;
typedef unsigned long bdigit_t;
typedef unsigned int size_t_;
/*
"Contains BIGDIGITS multiple-precision arithmetic code originally
written by David Ireland, copyright (c) 2001-6 by D.I. Management
Services Pty Limited <www.di-mgt.com.au>, and is used with
permission."
*/

/* Useful macros */

#define MAXDIGITS MAXBITS/8

#define ISODD(x) ((x) & 0x1)
#define ISEVEN(x) (!ISODD(x))
#define mpISODD(x, n) (x[0] & 0x1)
#define mpISEVEN(x, n) (!(x[0] & 0x1))
#define mpNEXTBITMASK(mask, n) do{if(mask==1){mask=HIBITMASK;n--;}else{mask>>=1;}}while(0)

/* Sizes to match */
#define MAX_DIGIT 0xff
#define MAX_HALF_DIGIT 0x0f    /* NB 'L' */
#define BITS_PER_DIGIT 8
#define BITS_PER_HALF_DIGIT 4
#define HIBITMASK 0x80

#define LOHALF(x) ((DIGIT_T)((x) & MAX_HALF_DIGIT))
#define HIHALF(x) ((DIGIT_T)((x) >> BITS_PER_HALF_DIGIT & MAX_HALF_DIGIT))
#define TOHIGH(x) ((DIGIT_T)((x) << BITS_PER_HALF_DIGIT))

void mpSetZero(DIGIT_T a[], size_t ndigits);

void mpSetEqual(DIGIT_T a[], const DIGIT_T b[], size_t ndigits);

int spMultiply(DIGIT_T p[2], DIGIT_T x, DIGIT_T y);

DIGIT_T spDivide(DIGIT_T *q, DIGIT_T *r, const DIGIT_T u[2], DIGIT_T v);

int mpModExp(DIGIT_T yout[], const DIGIT_T x[],
            const DIGIT_T e[], const DIGIT_T m[], size_t ndigits);

char *copyright_notice(void);

/****************************/
/* RANDOM NUMBER OPERATIONS */
/****************************/

/* Useful definitions */
#ifndef FALSE
#define FALSE               0
#endif
#ifndef TRUE
#define TRUE                1
#endif
#ifndef max
#define max(a,b)            (((a) > (b)) ? (a) : (b))
#endif
#ifndef min
#define min(a,b)            (((a) < (b)) ? (a) : (b))
#endif

typedef struct T
{
    DIGIT_T *digits;    /* Ptr to array of digits, least sig. first */
    size_t ndigits;        /* No of non-zero significant digits */
    size_t maxdigits;    /* Max size allocated */
}RTR;
#define BIGD RTR

/* [Version 2.1: bdRandDigit and bdRandomBits moved to bigdRand.h] */

/* TYPEDEF for user-defined random byte generator function */
typedef int (* BD_RANDFUNC)(unsigned char *buf, size_t nbytes, const unsigned char *seed, size_t seedlen);
// static int (unsigned char *bytes, size_t nbytes, const unsigned char *seed, size_t seedlen);
bdigit_t bdShortMod(RTR *r, RTR *u, bdigit_t d);
DIGIT_T mpShiftRight(DIGIT_T a[], const DIGIT_T b[], size_t shift, size_t ndigits);
int spMultiply(DIGIT_T p[2], DIGIT_T x, DIGIT_T y);
DIGIT_T spDivide(DIGIT_T *q, DIGIT_T *r, const DIGIT_T u[2], DIGIT_T v);
void mpSetEqual(DIGIT_T a[], const DIGIT_T b[], size_t ndigits);
void mpSetZero(DIGIT_T a[], size_t ndigits);
int mpCompare(const DIGIT_T a[], const DIGIT_T b[], size_t ndigits);
void mpSetDigit(DIGIT_T a[], DIGIT_T d, size_t ndigits);
size_t mpSizeof(const DIGIT_T a[], size_t ndigits);
int mpSquare(DIGIT_T w[], const DIGIT_T x[], size_t ndigits);
DIGIT_T mpShiftLeft(DIGIT_T a[], const DIGIT_T *b,size_t shift, size_t ndigits);
DIGIT_T mpShiftRight(DIGIT_T a[], const DIGIT_T b[], size_t shift, size_t ndigits);
DIGIT_T mpAdd(DIGIT_T w[], const DIGIT_T u[], const DIGIT_T v[],size_t ndigits);
DIGIT_T mpShortDiv(DIGIT_T q[], const DIGIT_T u[], DIGIT_T v,size_t ndigits);
DIGIT_T mpMultSub(DIGIT_T wn, DIGIT_T w[], const DIGIT_T v[],DIGIT_T q, size_t n);
int QhatTooBig(DIGIT_T qhat, DIGIT_T rhat,DIGIT_T vn2, DIGIT_T ujn2);
int mpDivide(DIGIT_T q[], DIGIT_T r[], const DIGIT_T u[],size_t udigits, DIGIT_T v[], size_t vdigits);
int moduloTemp(DIGIT_T r[], const DIGIT_T u[], size_t udigits,DIGIT_T v[], size_t vdigits, DIGIT_T tqq[], DIGIT_T trr[]);
int modSquareTemp(DIGIT_T a[], const DIGIT_T x[],
              DIGIT_T m[], size_t ndigits,
              DIGIT_T temp[], DIGIT_T tqq[], DIGIT_T trr[]);
int mpMultiply(DIGIT_T w[], const DIGIT_T u[], const DIGIT_T v[],size_t ndigits);
int modMultTemp(DIGIT_T a[], const DIGIT_T x[], const DIGIT_T y[],
              DIGIT_T m[], size_t ndigits,
              DIGIT_T temp[], DIGIT_T tqq[], DIGIT_T trr[]);
extern int mpModExp(DIGIT_T yout[], const DIGIT_T x[],
            const DIGIT_T e[], const DIGIT_T m[], size_t ndigits);

=================

в файле rsa.c

int mpModExp(DIGIT_T yout[], const DIGIT_T x[],
            const DIGIT_T e[], const DIGIT_T m[], size_t_ ndigits)
{
}

под Fedora Core 8 все собиралось без проблем (i386), под FC16 ругается (x86_64) :

/rsa.c:8: error: conflicting types for 'mpModExp'
rsa.h:116: previous declaration of 'mpModExp' was here

и такая ругань на все функции объявленные в rsa.h и реализованные в rsa.c

я что то упустил в развитии компиляторов ? В заголовочнике определяем в .с реализовываем. что не так ?


Содержание

Сообщения в этом обсуждении
"conflict types в заголовочном файле и в С"
Отправлено Anonim , 11-Июл-12 17:26 
> понадобилось старый проект скомпилить под новую систему.
> в файле rsa.h

size_t_ ndigits


> я что то упустил в развитии компиляторов ? В заголовочнике определяем в
> .с реализовываем. что не так ?

Что за size_t_?


"conflict types в заголовочном файле и в С"
Отправлено greenetc , 11-Июл-12 17:33 
>> понадобилось старый проект скомпилить под новую систему.
>> в файле rsa.h
>  size_t_ ndigits
>> я что то упустил в развитии компиляторов ? В заголовочнике определяем в
>> .с реализовываем. что не так ?
> Что за size_t_?

показал весь .h



"conflict types в заголовочном файле и в С"
Отправлено Anonim , 11-Июл-12 17:48 
>>> понадобилось старый проект скомпилить под новую систему.
>>> в файле rsa.h
>>  size_t_ ndigits
>>> я что то упустил в развитии компиляторов ? В заголовочнике определяем в
>>> .с реализовываем. что не так ?
>> Что за size_t_?
> показал весь .h

Так у тебя в объявлении функции один параметр size_t, а в определении size_t_ или unsigned int. Ты портируешь код с 32x на 64х. Видимо на 32 size_t_ == unsigned int эквивалентно size_t, а на 64x - нет. А зачем вообще понадобилось так делать?


"conflict types в заголовочном файле и в С"
Отправлено greenetc , 12-Июл-12 09:29 
>[оверквотинг удален]
>>>> в файле rsa.h
>>>  size_t_ ndigits
>>>> я что то упустил в развитии компиляторов ? В заголовочнике определяем в
>>>> .с реализовываем. что не так ?
>>> Что за size_t_?
>> показал весь .h
> Так у тебя в объявлении функции один параметр size_t, а в определении
> size_t_ или unsigned int. Ты портируешь код с 32x на 64х.
> Видимо на 32 size_t_ == unsigned int эквивалентно size_t, а на
> 64x - нет. А зачем вообще понадобилось так делать?

Та уже и не вспомню со времен fedorecore 8 ... видимо мудрил тогда. Подсказка помогла именно в разрядности size_t и дело ...на машинах 32 размер size_t = 32, а на x86_64 , size_t = 64 .... спасибо.