2017-04-25 220 views
-2

file1.c中爲extern 「C」 導致錯誤 「預期 '(' 字符串常量前」

int add(int a, int b) 
{ 
    return (a+b); 
} 

file2.cpp

void main() 
{ 
    int c; 

    c = add(1,2); 
} 

h1.h

extern "C" { 

#include "stdio.h" 

int add(int a,int b); 
} 

案例1: 當我包括h1.hfile1.c文件然後gcc編譯器拋出一個錯誤「預期」('字符串常量「之前」。

的情況下2: 當我包括h1.hfile2.cpp文件編制工作順利

問:

1)這是否意味着我可以不包括C頭文件用extern「C」函數呢?

2)可以包括我的extern 「C」 內報頭像下面所示

extern "C" { 

#include "abc.h" 
#include "...h" 
} 

3)I可以把C++函數定義在與外部的 「C」 的頭文件,這樣我可以在C文件調用它?

例如

a.cpp(CPP文件)

void test() 
{ 
    std::printf("this is a test function"); 
} 

啊(頭文件)

extern "C" { 
void test(); 
} 

b_c.c(C文件)

#include "a.h" 

void main() 
{ 
    test(); 
} 
+0

http://stackoverflow.com/questions/3329159/including-c-headers-inside-ac-program –

+6

'extern「C」'是一個C++特性:http://en.cppreference.com/w/ CPP /語言/ language_linkage – UnholySheep

回答

1

由於extern「C」不被C編譯器理解,需要創建一個可以包含在C和C++文件中的頭文件。

E.g.

#ifdef __cplusplus 
extern "C" int foo(int,int); 
#else 
int foo(int,int); 
#endif 
2

寫啊這樣的:

#pragma once 
#ifdef __cplusplus 
extern "C" 
{ 
#endif 

int add(int a,int b); 

#ifdef __cplusplus 
} 
#endif 

這樣你可以聲明多種功能 - 有沒有必要在前面加上的extern C. 正如其他人提到:外部C是C++的事情,所以它在C編譯器看來需要「消失」。

相關問題