Re[8]: Непонятная ошибка при компиляции gcc
От: Helga_F Россия  
Дата: 23.06.06 09:36
Оценка:
В Торнадо лежит два компилятора стандарт С — gcc и С++ — g++pentium. (Машина target — Xeon)


Написала небольшой примерчик
init.c:


struct sci_unit
{
 int nodeId;
 int unitNum;
};

struct sci_unit ssu;

typedef struct sci_unit *Sci_p;




int Func(int num1, int num2)
{
    ssu.nodeId=num1;
    Sci_p sci_p;        /*22*/
    sci_p=&ssu;        /*23*/
    sci_p->nodeId=num2;
    return 1;
}



и откомпилировала его двумя способами.
Так вот, при компиляции gcc (gcc -c -O0 init.c) появляются следующие ошибки:

init.c: In function 'Func' :
init.c:22: parse error before 'sci_p1'
init.c:23: 'sci_p1' undeclared (first use in this function)
init.c:23: (Each undeclared identifier is reported only once
init.c:23: for each function it appears in.)


Компиляция g++pentium проходит нормально. В чем прикол, разве здесь то, что в данном коде не нравится ANSI C?


Хотя когда компилирую уже драйвера компилятором g++pentium, он начинает ругаться на следующее (причем у gcc это прокатило):

1) conflicted types for enum unsigned32
в одном файле unsigned32 описан как тип enum (
typedef enum unsigned32 {...}hostbridge_t ;

),
а в другом опредлен как тип int
typedef unsigned int insigned32

.

2) ANSI C++ forbids data member 'TORUS_sciPhisicalNodeIdTable' with same name as enclosing class
данная структура описана следующим образом:

typedef struct TORUS_sciPhysicalNodeIdTable {
         sciNodeId_t TORUS_sciPhysicalNodeIdTable[MAX_NUMBER_OF_NODES];
    } TORUS_sciPhysicalNodeIdTable_t;




Первый раз вижу, чтобы ANSI C допускал такое использование имен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.