小编P. *_*air的帖子

项目中多个包含相同的头文件:C vs C ++

在这里,我有一个示例项目,其中包含两个源文件和一个头文件,如下所示:

main.c:

#include<stdio.h>                                                               
#include "personal.h"                                                           
int main(){                                                                     
    i = 5;                                                                        
    printf("Value is %d\n",i);                                                    
    return 0;                                                                     
 }
Run Code Online (Sandbox Code Playgroud)

sub.c:

#include "personal.h"                                                           
// do nothing
Run Code Online (Sandbox Code Playgroud)

最后是personal.h:

#pragma once                                                                    
int i; 
Run Code Online (Sandbox Code Playgroud)

每个.c文件都包含personal.h,后者受“保护”。我用gcc编译,一切正常:

>gcc sub.c main.c -o out
>./out 
Value is 5
Run Code Online (Sandbox Code Playgroud)

但是对于g ++,会发生这种情况:

>g++ sub.c main.c -o out
/tmp/cctYwVnO.o:(.bss+0x0): multiple definition of `i'
/tmp/ccPElZ27.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

在文件链接方式,预处理器活动等方面,C ++和C之间在本质上有什么不同吗?我对其他编译器(如clang)尝试了相同的操作,并且发生了相同的情况。我也许在这里想念一些愚蠢的东西。

c c++ preprocessor compilation include

1
推荐指数
1
解决办法
87
查看次数

标签 统计

c ×1

c++ ×1

compilation ×1

include ×1

preprocessor ×1