Damiluke 0 Denunciar post Postado Setembro 7, 2008 Olá, boa noite. Tenho um programa com dois ficheiros: main.c CODE #include <stdio.h>#include <stdlib.h> #include "configs.c" int main(int argc, char *argv[]) { printf("Idade: %d", idade); system("PAUSE"); return 0; } e configs.c CODE int idade = 10; Quando faço compile & run é-me apresentada a seguinte mensagem: multiple definition of 'idade'. Alguem me pode explicar porque isto acontece. Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Setembro 7, 2008 Porque você definiu a variável idade mais de 1 vez... Não sei p/ que você tem um .c com apenas uma variável. Deixa ela no main mesmo. Compartilhar este post Link para o post Compartilhar em outros sites
Damiluke 0 Denunciar post Postado Setembro 7, 2008 Porque você definiu a variável idade mais de 1 vez... Não sei p/ que você tem um .c com apenas uma variável. Deixa ela no main mesmo. Não, a variavel 'idade' apenas se encontra definida no ficheiro configs.c. A ideia de colocar uma unica variavel no ficheiro configs.c foi apenas para exemplificar. A ideia era colocar nesse ficheiro todas as constantes e todas as variáveis globais. Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Setembro 7, 2008 ....É a tradução literal do erro. Vou te mostrar como você definiu mais de uma vez a idade:tem a ver com a tabela de símbolos que o compilador usa p/ criar os executáveis. configs.o Sections:Idx Name Size VMA LMA File off Algn 0 .text 00000000 00000000 00000000 00000034 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .data 00000004 00000000 00000000 00000034 2**2 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00000000 00000000 00000000 00000038 2**2 ALLOC 3 .comment 0000001d 00000000 00000000 00000038 2**0 CONTENTS, READONLY 4 .note.GNU-stack 00000000 00000000 00000000 00000055 2**0 CONTENTS, READONLY SYMBOL TABLE: 00000000 l df *ABS* 00000000 configs.c 00000000 l d .text 00000000 .text 00000000 l d .data 00000000 .data 00000000 l d .bss 00000000 .bss 00000000 l d .note.GNU-stack 00000000 .note.GNU-stack 00000000 l d .comment 00000000 .comment 00000000 g O .data 00000004 idade main.o Sections:Idx Name Size VMA LMA File off Algn 0 .text 0000002f 00000000 00000000 00000034 2**2 CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE 1 .data 00000004 00000000 00000000 00000064 2**2 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00000000 00000000 00000000 00000068 2**2 ALLOC 3 .rodata 00000004 00000000 00000000 00000068 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA 4 .comment 0000001d 00000000 00000000 0000006c 2**0 CONTENTS, READONLY 5 .note.GNU-stack 00000000 00000000 00000000 00000089 2**0 CONTENTS, READONLY SYMBOL TABLE: 00000000 l df *ABS* 00000000 main.c 00000000 l d .text 00000000 .text 00000000 l d .data 00000000 .data 00000000 l d .bss 00000000 .bss 00000000 l d .rodata 00000000 .rodata 00000000 l d .note.GNU-stack 00000000 .note.GNU-stack 00000000 l d .comment 00000000 .comment 00000000 g O .data 00000004 idade 00000000 g F .text 0000002f main 00000000 *UND* 00000000 printf Quando você compila os dois .c e ainda coloca o .h dentro do main.c você está definindo duplamente a variável idade,sim. Simplesmente porque a grosso modo o include vai copiar o conteudo do .c e durante a fase de linkagem o compilador vai achar duas referências à variável idade. Se esse Compile & Run compila o projeto inteiro e não somente o fonte ativo,isso já era de se esperar, já que incluindo num .h ou compilando somente o main.c o erro não ocorre. Compartilhar este post Link para o post Compartilhar em outros sites