相关疑难解决方法(0)

DllImport或LoadLibrary以获得最佳性能

我有外部.DLL文件,里面有快速汇编程序代码.调用此.DLL文件中的函数以获得最佳性能的最佳方法是什么?

c# dllimport loadlibrary

6
推荐指数
2
解决办法
3万
查看次数

关于extern"C"的C++到Java转换问题

我必须将一些C/C++代码转换为Java.我的C++非常生疏.

.h文件中,我有以下内容:

#ifdef __cplusplus
extern "C" {
#endif

/* tons of declarations */

#ifdef __cplusplus
} /* extern C */
#endif
Run Code Online (Sandbox Code Playgroud)

有什么用extern "C"?这是什么意思?它告诉编译器相应的代码应该被解释为纯C而不是C++吗?

编辑

谢谢你到目前为止的答案.我必须转换的代码的历史是,它似乎首先用C语言编写,然后其余部分用C++编写.所以我的头文件似乎对应于'旧的'C代码.

我将此代码转换为public final class静态方法和属性.没有压倒一切.

c c++ java

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

混合C++和Fortran链接问题

我在网上做了一些搜索,但我找不到如何从linux编译一个简单的C++和Fortran代码.我需要让它变得复杂,但我只需要知道如何从一个简单的例子开始.

我的C++代码是这样的:

#include <iostream>
using namespace std;

extern int Add( int *, int * );
extern int Multiply( int *, int * );

int main()
{
    int a,b,c;  
    cout << "Enter 2 values: ";
    cin >> a >> b;

    c = Add(&a,&b);
    cout << a << " + " << b << " = " << c << endl;
    c = Multiply(&a,&b);
    cout << a << " * " << b << " = " << c << endl;
    return …
Run Code Online (Sandbox Code Playgroud)

c++ linker fortran fortran-iso-c-binding intel-fortran

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

OBJC_EXTERN:目的是什么?

您正在查看一些Objective-C代码,并发现以下声明:

OBJC_EXTERN void CLSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);

这意味着什么?那么,这个陈述的语法应该是什么?

提前致谢

objective-c extern

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

extern和extern"C"表示变量

我正在编写一个C++共享库供C程序使用.但是,我有一个关于extern和的问题extern "C".

请考虑以下代码

我的头文件是这样的:

#ifdef __cplusplus      
     extern "C" int global;
     extern "C" int addnumbers(int a, int b); 
 #else
      extern int global;
 #endif
Run Code Online (Sandbox Code Playgroud)

这完美无缺; 我只需要申报

int global;
Run Code Online (Sandbox Code Playgroud)

在我的.cpp或我的.c文件中.但是,我不明白的是:

extern "C"extern这里有什么区别?我试着评论出来extern "C" int global并且有效!为什么?

我知道这extern "C"用于制作C链接.这就是我的原因extern "C" int addnumbers(int,int).换句话说,如果我想编写一个将在C程序中使用的C++函数,我会写extern "C".现在,全球变量怎么样 - 我猜这里的情况有所不同?我想C程序使用一个名为C++变量global,但我可以用externextern "C".这是为什么?这对我来说并不直观.

评论:我不认为这是重复的,因为我问的是当你将它用于变量与函数时有什么区别.

c c++ linkage extern-c

5
推荐指数
2
解决办法
3771
查看次数

强制将c ++的一部分编译为C语言

我想在c ++源代码中定义一个应该是POD的结构(所以它应该基于C标准而不是C++编译)

例如,假设我在c ++文件中有以下代码:

struct myStruct
{
   int x;
   int y;
}
class MyClass
{
    int x;
    int y;
}
Run Code Online (Sandbox Code Playgroud)

如果我编译此代码,struct是POD,应该编译为POD.因此,成员变量的位置遵循C标准,该标准已明确定义.

但假设用户可能会错误地将代码更改为此代码:

struct myStruct
{

   int x;
   int y;
private:
   int z;
}
class MyClass
{
    int x;
    int y;
}
Run Code Online (Sandbox Code Playgroud)

现在结构不是POD,编译器可以自由地将成员变量放在内存中.

如何强制编译器确保始终根据C标准编译结构?

请注意,我不能将代码放在*.c代码中,因为我正在开发一个可以包含在*.cpp源代码中的头代码.

c c++ struct

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

使用 C++ 将半字写入闪存时的 ARM Cortex-M HardFault 异常

我已经使用 C++ 编写了一个在 ARM Cortex-M (STM32F0) 上运行的项目,但是我在将定义的缓冲区作为类成员访问时遇到了一些问题,尽管我通过将它们定义为全局变量来解决这个问题。

但是现在我完全被这个新问题困住了,我不知道该怎么办。

我有一个代码可以解锁闪存并向其中写入内容并关闭它。如果我在 C 文件中实现它并通过 C 自然运行它(从 main.c 调用)它工作完美。但是通过 C++ 文件(无论是写在 C 还是 C++ 源文件中)调用它会抛出一个 HardFault 异常。

static uint32_t waitForLastOperation(uint32_t msDelay)
{
  while (READ_BIT(FLASH->SR, FLASH_SR_BSY) && msDelay)
  {
    LL_mDelay(1);
    msDelay--;
  }

  /* Check FLASH End of Operation flag  */
  if (READ_BIT((FLASH->SR), (FLASH_SR_EOP)))
  {
    /* Clear FLASH End of Operation pending bit */
    (FLASH->SR) = (FLASH_SR_EOP);
  }

  if (READ_BIT((FLASH->SR),
      (FLASH_SR_WRPERR)) || READ_BIT((FLASH->SR), (FLASH_SR_PGERR)))
  {
    FLASH->SR = 0U;
    return 0;
  }

  /* There is no error …
Run Code Online (Sandbox Code Playgroud)

c c++ gcc arm stm32

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

未知边界参数的多维数组:C 和 C++ 之间的区别

以下程序编译为 C 程序:

\n
#include <stdlib.h>\n#include <stdio.h>\n\nvoid f(int n, int m, int x[n][m]) {\n  printf("x[0][2] = %i\\n",x[0][2]);\n}\n\nint main() {\n  int v[][3] = { {0,1,2}, {3,4,5} };\n\n  f(2,3,v);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

然而,当用 g++ 编译为 C++ 时,我有:

\n
main.c:4:29: error: use of parameter outside function body before \xe2\x80\x98]\xe2\x80\x99 token\n void f(int n, int m, int x[n][m]) {\n                             ^\n
Run Code Online (Sandbox Code Playgroud)\n

看来C的这个特性在C++中并不存在。是否可以向 g++ 提供任何标志以使其接受代码?

\n

c c++ gcc c99

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

android ndk jni没有找到实现错误

我正在使用android并试图在我的应用程序中使用一些本机代码.

这是应用程序代码的框架:

package A.B;
/*
import statements
*/

public class C extends Activity{

public void onCreate(...){
    ....
    foo();
    ....
}

public int foo(){
    .....
    data(a, b);
    .....
}

public int data(a, b){
    GetValues(a, b);
}

static{
    System.loadLibrary("baz");
}

public native int GetValues(int[] a, int b);
}
Run Code Online (Sandbox Code Playgroud)

本机方法签名如下:

JNIEXPORT jint JNICALL

Java_A_B_C_GetValues(JNIEnv *env, jobject obj, jintArray arr, jint b){

....

....

} 
Run Code Online (Sandbox Code Playgroud)

运行logcat时显示:W/dalvikvm(799):找不到本机LA/B/C的实现; .GetValues([IJ] I

ndk文档并没有严格提到创建一个头文件,所以我没有

android.mk文件的内容:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := baz
LOCAL_SRC_FILES := baz.cpp

include $(BUILD_SHARED_LIBRARY) …
Run Code Online (Sandbox Code Playgroud)

java-native-interface android android-ndk

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

Extern "C" 函数内部使用 C++ 类

这样做合法吗?我想导出一个 C 函数,但在内部该函数将使用一个 C++ 类。

extern "C" BOOL /*BOOL==int*/ Func()
{
   return someclass::getinstance()->Func(); // this is just bool tho
}
Run Code Online (Sandbox Code Playgroud)

c c++ extern linkage

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