小编use*_*733的帖子

为用户数据选择const与非const指针

考虑一个简单,可重用的库.它有一个当前状态的对象,以及一个回调函数来输入它.

typedef struct Context_S Context_T;

typedef size_t (*GetBytes_T) (Context_T * ctx, uint8_t * bytes, size_t max);

struct Context_S {
    GetBytes_T byteFunc;
    void * extra;
    // more elements
};

void Init(Context_T * ctx, GetBytes_T func);
int GetNext(Context_T * ctx); // Calls callback when needs more bytes
Run Code Online (Sandbox Code Playgroud)

用户可能需要一些额外的数据用于回调(如文件指针).库提供了一个额外指针的函数:

void SetExtra(Context_T * ctx, void * ext); // May be called after init
void * GetExtra(Context_T const * ctx); // May be called in callback
Run Code Online (Sandbox Code Playgroud)

但是,如果用户额外数据是常量,则需要他在设置数据之前将常量输出.我可以将函数更改为take/return const,但如果数据不应该是常量,则需要额外的回调.

void SetExtra(Context_T * ctx, void const * …
Run Code Online (Sandbox Code Playgroud)

c api

2
推荐指数
1
解决办法
188
查看次数

根据jvm和Tomcat设置堆内存之间的区别

我在我的系统中安装了Java 8,并且能够从命令行查看和设置JVM的初始和最大堆大小.我使用tomcat 7,在浏览一些教程时,我发现了一种方法来改变tomcat的堆大小以及使用setenv.bat文件.

我的问题是上述两件事情有何不同?tomcat的启动脚本或批处理文件使用安装在系统中的Java 8,使用JAVA_HOME环境变量.

如果我的JVM堆空间是1024 M并且我为tomcat设置了512 M堆空间,这是否意味着我的tomcat应用程序可以使用来自JVM的1024 M堆的最多512 M的堆?

java jvm tomcat7

2
推荐指数
1
解决办法
1548
查看次数

如何在c ++中通过引用传递数组元素?

是否可以通过引用传递单个数组元素(以便传入的参数被修改)?例如,假设这是一个主要部分:

int ar[5] = {1,2,3,4,5};
test(&ar[2]);
Run Code Online (Sandbox Code Playgroud)

现在这是函数定义:

void test(int &p)
{
    p = p + 10;
    return;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码导致编译错误.

c++

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

术语和代码行的平等

任何人都可以一步一步解释我,这种平等如何能够成立?

((a^b)&~b)|(~(a^b)&b)  == a
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?

c bit-manipulation bitwise-operators logical-operators

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

-D name = definition和bitwise运算符

我试图了解下一次计算是如何执行的.

例如,如果这是我的终端命令

gcc ex2.c -D b+=2
Run Code Online (Sandbox Code Playgroud)

为什么我得到5?

#include <stdio.h>

int main() 
{
#ifdef b
    printf("%d\n", 2 b | ~ 2 b);
#endif
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

2 b表示2*b?

~2 b意味着2*b然后〜?

c gcc bitwise-operators bitflags

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

后增量运算符如何工作。有例外吗?

考虑这段代码

int j = 0;
int x = 0;

for(int i=0;i<5;i++){
    j = x++;
    cout<<x<<" ";
}
Run Code Online (Sandbox Code Playgroud)

输出:

1 2 3 4 5

现在考虑这个

int j=0;

for(int i=0;i<5;i++){
    
    j = j++;
    cout<<j<<" "; 
}
Run Code Online (Sandbox Code Playgroud)

输出:

0 0 0 0 0

我的疑问是为什么j在分配 value 后没有增加0。不j=j++;等于j = j; j++;,如果不是,那么第一种情况会发生什么。我知道这是一个愚蠢的怀疑,但我自己无法弄清楚。

c++ undefined-behavior post-increment

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

C语言中的for循环问题

我正在创建一个int数组并将其所有元素都0放入其中C.

使用:

int arr[50],i;
for(i=0;i<50;i++){
    arr[i]=0;
}
Run Code Online (Sandbox Code Playgroud)

如果在函数内部使用或者main()类似,它可以正常工作:

int main(){
    int arr[50],i;
    for(i=0;i<50;i++){
        arr[i]=0;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是如果我们使用任何函数之外的代码,会发生奇怪的事情:

#include <stdio.h>
int arr[50],i;
for(i=0;i<50;i++){
    arr[i]=0;
}
int main()
{
     printf("Hello World!");
     return 0;
} 
Run Code Online (Sandbox Code Playgroud)

编译时出错:

error: expected identifier or '(' before 'for'    
 for(i=0;i<50;i++){                                           
 ^  
Run Code Online (Sandbox Code Playgroud)

那么,那个语法C不支持函数外的循环吗?

如果不是,那为什么会这样呢?

c

0
推荐指数
1
解决办法
81
查看次数

C中任何数字除以0都会出现分段错误吗?

int main()
{
    int x = 5, y = 0;
    int z = x / y;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我知道它是在未定义的行为下,但它是否意味着分段错误?CPU处理如何除以0大小写?

当我运行它时,我得到浮点异常(核心转储).

c segmentation-fault divide-by-zero undefined-behavior

0
推荐指数
2
解决办法
726
查看次数

如何在IAR Workbench Studio中包含头文件?

我已经在 IAR IDE 中创建了组,并且添加了 .h 文件,但仍然显示错误,例如找不到源文件。如何在IAR中添加头文件?

图像

我还尝试在预处理器中添加路径为 $PROJ_DIR$/hdr。但我仍然遇到同样的错误。

c embedded iar

0
推荐指数
1
解决办法
849
查看次数