我必须修改一个C项目,因为我现在需要使用一个C ++函数。
我们假设我有一个名为A.c的文件:
A.C
iron-scroll-threshold
以及其他也使用这些变量的文件,我们称之为B.c和C.c:
B.c
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<link rel="import" href="bower_components/polymer/polymer.html">
<link rel="import" href="bower_components/iron-ajax/iron-ajax.html">
<link rel="import" href="bower_components/iron-scroll-threshold/iron-scroll-threshold.html">
<script src="bower_components/webcomponentsjs/webcomponents-lite.js"></script>
</head>
<body>
<test-component></test-component>
<dom-module id="test-component">
<template>
<style>
:host {
display: block;
height: 100%;
}
iron-scroll-threshold {
height: 100%;
overflow: auto;
}
</style>
<iron-ajax auto url= "{{url}}" last-response="{{response}}"></iron-ajax>
<iron-scroll-threshold id="mytras" on-lower-threshold="loadMoreData" lower-threshold="100" scroll-target="document">
<template is="dom-repeat" items="{{response.results}}">
<span> [[index]] : [[item.name.first]] [[item.name.last]]</span><br/><br/><br/>
</template>
</iron-scroll-threshold>
</template>
<script>
class MyTest extends Polymer.Element {
static get is() { return 'test-component'; }
static get properties() { return {
people:{
type:Number,
value:20
}
}};
static get observers() { return ['_url(people)']}
_url(p){
console.log(p);
this.url = "https://randomuser.me/api?results=" + p;
setTimeout(()=> {
this.$.mytras.clearTriggers();
},900)
}
loadMoreData (){
console.log("God call me for every scroll");
this.people += 10;
}
}
customElements.define(MyTest.is, MyTest);
</script>
</dom-module>
</body>
</html>
C.c
uchar *const x;
uchar *const y;
/.../
当我用C编译器编译所有文件时,一切都很完美。 现在我需要使用一些C ++函数,所以我需要使用C ++编译器重新编译所有内容。这里有错误:
extern uchar *const x;
extern uchar *const y;
/.../
foo1(x);
bar1(y);
根据答案here中的建议,并在B.c和C.c中的变量周围使用extern uchar *const x;
extern uchar *const y;
/.../
foo1(x);
bar1(y);
生成其他错误
关于如何解决这个问题的一些想法?
答案 0 :(得分:0)
extern
关键字应该放在头文件中,变量定义只需要在一个源文件中,所以你想要的是:
在A.h:
extern uchar *const x;
extern uchar *const y;
在A.c
uchar *const x;
uchar *const y;
在B.c
#include "A.h"
void someFunction() {
foo(x);
bar(y);
}
在C.c
#include "A.h"
void someOtherFunction() {
foo(x);
bar(y);
}