2017-04-25 7 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コンパイラは "expected '('文字列定数の前に '')というエラーをスローします。

ケース2: 私はh1.hでfile2.cppファイルのコンパイル作業を含め、正常

質問:

1)それは私がCのヘッダファイルをインクルードすることができないことを意味していますそれにextern "C"関数がありますか?

extern "C" { 

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

3の下に示すように

2)は、私は私がCファイルにそれを呼び出すことができるようにすることができます私はのextern「C」とのヘッダファイルに++の関数定義をCを置く)はextern「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/language_linkage – UnholySheep

答えて

1

extern "C"はCコンパイラによって理解されていないのでCおよびC++ファイルに含めることができるヘッダーを作成する必要があります。

など。このような

#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. で各1を先頭に付加する必要はありませんます。extern CはC++のものですしたがって、Cコンパイラに見えるときには "消滅"する必要があります。

関連する問題