我试图从一个foo类调用内核包装器C++。我试着按照建议的做下面的工作:
// In CPP.h:
class cls {
extern "C" inline void foo();
}
// In Kernels.cu:
#include "CPP.h"
extern "C" inline void cls::foo() {
// call kernels here
}
但是这不起作用--我得到了一个编译器错误:
CPP.h: invalid storage class for a class member
CPP.h
我试图用三元操作符清理一些代码,我遇到了一些我无法理解的编译器错误。
我之前拥有的代码看起来像这样,运行良好。
if(!inFile.good())
throw -2;
getline(inFile, inLine);
我试着用这段代码来清理它。
(inFile.good()) ? getline(inFile, inLine) : throw -2;
但我得到了以下错误。
g++ -w -o test orange_test.cpp
In file included from orange_test.cpp:4:
In file included from /Application
我在头文件中使用函数实现来实现简单的代码共享。最起码的例子:
F.h:
#ifndef FOO_H
#define FOO_H
// potentially want to include extern/static/inline keyword for this function
int max(int x, int y) {
return x < y ? y : x;
}
#endif
bar.c:
#include <stdio.h>
#include "foo.h"
int main() {
printf("Max of
标准中指定的
如果函数的标识符声明没有存储类说明符,则它的链接被精确地确定,就好像它是用存储类说明符extern声明的一样。
但是,函数说明符部分给出了inline函数语义如下:
任何具有内部链接的函数都可以是内联函数。对于具有外部链接的函数,适用以下限制:如果一个函数是用内联函数说明符声明的,那么它也应该定义在同一个翻译单元中。如果翻译单元中的函数的所有文件范围声明都包含没有extern的内联函数说明符,那么该转换单元中的定义就是内联定义。
案例1.
static inline void test(void){ //internal linkage, can be an inline f
考虑以下具有inline-function的C++代码:
// this function is in a header-file:
// recursion prevents inlining
inline int calc(int k){
if(k<=1) return 1;
return calc(k-1)+calc(k-2);
}
// this function is in a source-file:
int fun(int k){
return calc(k);
}
在这里,我使用递归来模拟编译器无法内联函数calc的情况。
生成的程序集(使用-O
正如标准所述,语言链接是函数类型的一部分,给出了以下示例
extern "C" void f1(void(*pf)()); // declares a function f1 with C linkage,
// which returns void and takes a pointer to a C function
// which returns void and takes no parameters
extern "C" typedef
我想在c++中包含一个程序集函数。我使用了谷歌,发现extern int test(int,int)在C语言中工作得很好,但在c++中却不行。我在C++里要做什么?我的代码:
#include <iostream>
extern int test(int,int);
int main () {
std::cout<<test(2,2); //Here I get "../main.cpp:6: undefined reference to `test'"
return 0;
}
我和MinGW一起使用eclipse。
我想使用C++作为我的微控制器(MSP432)项目的主要编程语言。
我编写了一些不涉及中断服务例程(ISR)的简单脚本。他们都工作得很好。该代码如下所示:
/* MSP and DriverLib includes */
/* no <<extern "C">> needed due to the header files implement it. */
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
int main()
{
/* Some C++ code here