小编Jee*_*tel的帖子

C++中的结构初始化

代码从Android AOSP代码中解密,Sensor.cpp具有以下代码.

struct sensors_module_t HAL_MODULE_INFO_SYM = {
    common: {
        tag: HARDWARE_MODULE_TAG,
        version_major: 1,
        version_minor: 0,
        id: SENSORS_HARDWARE_MODULE_ID,
        name: "LGE Sensor module",
        author: "LG Electronics Inc.",
        methods: &sensors_module_methods,
        dso: NULL,
        reserved: {0}
    },
    get_sensors_list: sensors__get_sensors_list,
};
Run Code Online (Sandbox Code Playgroud)

现在我不明白这里:意味着什么?是某种初始化还是其他什么?

我对C++知之甚少.所以如果有任何链接或资源来理解这件事情将不胜感激.谷歌搜索我找不到多少.

c++ data-structures

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

为什么在嵌入式系统代码中通过memcpy复制结构?

在用于复制相同类型结构的嵌入式软件域中,人们不使用直接赋值,而是通过memcpy()函数或每个元素复制来执行.

举个例子来说

struct tag
{

int a;

int b;
};

struct tag exmple1 = {10,20};

struct tag exmple2;
Run Code Online (Sandbox Code Playgroud)

将exmple1复制到exmple2 ..而不是直接写

exmple2=exmple1;
Run Code Online (Sandbox Code Playgroud)

人们用

memcpy(exmple2,exmple1,sizeof(struct tag));
Run Code Online (Sandbox Code Playgroud)

要么

exmple2.a=exmple1.a; 
exmple2.b=exmple1.b;
Run Code Online (Sandbox Code Playgroud)

为什么????

c embedded struct

11
推荐指数
3
解决办法
3779
查看次数

线程函数中的局部变量是否根据线程有separe副本?

我在一个函数中声明了一些局部变量,如下所示:

void* thread_function (void* parameter)
{
   struct parameter * thread_data = (struct parameter *)parameter;
   char buffer[20];
   int temp;
}
Run Code Online (Sandbox Code Playgroud)

如果我在一个线程中创建了两个线程,如果缓冲区和临时更新,那么它会影响其他线程吗?

我的意思是如果有两个线程那么会有两个副本的所有局部变量?

编辑:然后在这种情况下,我需要使用线程特定的数据.我的意思是pthread_setspecific和所有这些东西

c linux multithreading

11
推荐指数
2
解决办法
6623
查看次数

为什么sizeof('a')在C中是4?

可能重复:
为什么C字符文字的内部而不是字符?

#include<stdio.h>
int main(void)
{
    char b = 'c';
    printf("here size is %zu\n",sizeof('a'));
    printf("here size is %zu",sizeof(b));
}
Run Code Online (Sandbox Code Playgroud)

这里输出(见现场演示在这里.)

here size is 4 
here size is 1
Run Code Online (Sandbox Code Playgroud)

我不明白为什么sizeof('a')是4?

c sizeof char literals

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

使用stdout和stderr禁用缓冲是否安全?

有时我们会以这种方式在代码中添加一些调试打印

printf("successfully reached at debug-point 1\n"); 

some code is here

printf("successfully reached at debug-point 2"); 
Run Code Online (Sandbox Code Playgroud)

现在在这种情况下只有debug-point1将在stdio上打印调试点2打印被写入stdio缓冲区但是它没有刷新因为它没有得到printf所以我们认为崩溃发生在debug-point1之后

如果我像这样禁用stdio和stderr流的缓冲选项,那么就来自于此

setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);
Run Code Online (Sandbox Code Playgroud)

那么这样做是否安全?

为什么所有流都默认为行缓冲?

编辑:

通常,对于任何文件流,默认分配缓冲区的大小是多少?我认为它的依赖.我想知道Linux?

c linux stdout buffering stderr

11
推荐指数
2
解决办法
8029
查看次数

为什么我的指针在空闲后不为空?

void getFree(void *ptr)
{
    if(ptr != NULL)
    {
        free(ptr);
        ptr = NULL;
    }
    return;
}
int main()
{
char *a;
a=malloc(10);
getFree(a);
if(a==NULL)
    printf("it is null");
else
    printf("not null");
}
Run Code Online (Sandbox Code Playgroud)

为什么这个程序的输出不是NULL?

c free

10
推荐指数
3
解决办法
1万
查看次数

"警告:将共享库与静态库链接不可移植"是什么意思?

我通过使用libmxml.a库的一些函数创建一个动态库,但是我得到了这个警告:

*Warning: Linking the shared library libgstmatroskademux.la against the _
*static library /home/Mr32/gst-template4_final/gst-plugin/src/libmxml.a _
is not portable!
Run Code Online (Sandbox Code Playgroud)

我也收到这个警告:

gcc: /home/Mr32/gst-template4_final/gst-plugin/src/libmxml.a: linker _
input file unused because linking not done
Run Code Online (Sandbox Code Playgroud)

那么这个警告的含义是什么?我该如何解决?

编辑:

有一个已经自动生成的make文件用于编译gstreamer插件.现在在该插件中使用libmxml.a的一些功能,我已经在make文件$(PATH)/libmxml.aGST_CFLAGS变量中添加了.现在,当我做makemake install,插件工作正常,但我仍然得到这样的警告.

c linux warnings shared-libraries static-libraries

10
推荐指数
3
解决办法
9577
查看次数

全局变量与局部变量的重新声明

当我编译下面的代码时

#include<stdio.h>

int main()
{
  int a;
  int a = 10;
  printf("a is %d \n",a);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

test3.c: In function ‘main’:
test3.c:6:5: error: redeclaration of ‘a’ with no linkage
test3.c:5:5: note: previous declaration of ‘a’ was here
Run Code Online (Sandbox Code Playgroud)

但是,如果我将变量设为全局,那么它可以正常工作.

#include<stdio.h>

int a;
int a = 10;
int main()
{
  printf("a is %d \n",a);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么两次声明相同的全局变量而不是错误,但对局部变量这样做是错误的?

c declaration definition one-definition-rule redefinition

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

realloc()在嵌入式系统中是否安全?

在为嵌入式系统开发软件时,我realloc()多次使用了函数.现在我被告知我"不应该realloc()在嵌入式中使用"而没有任何解释.

realloc()嵌入式系统是危险的,为什么?

c embedded memory-management realloc

9
推荐指数
2
解决办法
2089
查看次数

为什么"int main(anything_you_type)"不会产生任何错误?

在这里,我已经在主要参数声明中写了我的名字,但是这个程序仍然有效并且没有给出任何警告.

#include <stdio.h>
int main(Mr32) 
{
    printf("why this works?");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

每当我写任何东西代替mr32时,代码仍然有效.我真的不知道为什么会这样.根据C编程标准,这是错误的,对吧?

编辑: 我已经尝试过 - 但它没有发出任何警告.

我认为这应该是错误,因为我没有做标准的C函数定义声明

在c中,每个函数定义都必须遵循此格式

return-type function_name ( arg_type arg1, ..., arg_type argN ); 
Run Code Online (Sandbox Code Playgroud)

这也应该适用于main()吧.. ??

好的-Wextra显示警告mr32默认为int.

那么为什么main()中的任何参数的默认类型都是int?

c compiler-construction error-handling gcc program-entry-point

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