日期:2014-05-16  浏览次数:20631 次

多次定义???
//a.h
C/C++ code

#ifndef A_H
#define A_H

#include <stdio.h>
#include <string.h>

#define LEN        (10)

struct Student
{
    char *name;
    int age;
};

void print_str(char *str)
{
    printf("%s\n", str);
    return ;
}

void print_int(int val);

#endif



//a.c
C/C++ code

#include "a.h"

void print_int(int val)
{
    printf("value is : %d\n", val);
    return ;
}



//main.c
C/C++ code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "a.h"

int main()
{
    char *str = "hello";

    struct Student st1;
    st1.name = "L";
    st1.age = 18;

    print_str(str);
    print_str(st1.name);
    print_int(st1.age);

    printf("main end!\n");

    return 0;
}




后在gcc中运行
gcc -c main.c
gcc -c a.c
gcc -o main main.o a.o
结果显示:

a.o: In function `print_str':
a.c:(.text+0x0): multiple definition of `print_str'
main.o:main.c:(.text+0x0): first defined here
collect2: ld returned 1 exit status



为什么会多次定义????

------解决方案--------------------
void print_str(char *str)
{
printf("%s\n", str);
return ;
}

放.c里,否则main.c和a.c都定义了同一个函数。