代码从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++知之甚少.所以如果有任何链接或资源来理解这件事情将不胜感激.谷歌搜索我找不到多少.
在用于复制相同类型结构的嵌入式软件域中,人们不使用直接赋值,而是通过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)
为什么????
我在一个函数中声明了一些局部变量,如下所示:
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字符文字的内部而不是字符?
#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?
有时我们会以这种方式在代码中添加一些调试打印
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?
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?
我通过使用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.a
的GST_CFLAGS
变量中添加了.现在,当我做make
和make install
,插件工作正常,但我仍然得到这样的警告.
当我编译下面的代码时
#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)
为什么两次声明相同的全局变量而不是错误,但对局部变量这样做是错误的?
在为嵌入式系统开发软件时,我realloc()
多次使用了函数.现在我被告知我"不应该realloc()
在嵌入式中使用"而没有任何解释.
realloc()
嵌入式系统是危险的,为什么?
在这里,我已经在主要参数声明中写了我的名字,但是这个程序仍然有效并且没有给出任何警告.
#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