我需要SIGCHLD妥善处理.如何在现有代码中使用它.目前我不能等待孩子的过程,除非我用0而不是WNOHANG|WUNTRACED.
status = 0;
pid_t child, endID;
if(amp == 1)
signal( SIGCHLD, SIG_IGN );
child = fork();
if (child < 0) {
perror("fork() error\n");
exit(EXIT_FAILURE);
} else if (child == 0) {
// do sth here
perror("error\n");
} else {
//sleep(1)
Run Code Online (Sandbox Code Playgroud)
如果我删除sleep然后父执行第一..为什么?
我编写C代码,对实现做出某些假设,例如:
char 是8位.>> 有符号整数sign-extends.doubleIEEE-754是双倍的,可以通过uint64_t预期的结果进行打字和打字.size_t不丢失信息的情况下转换回来.char*与普通算术相同size_t.void*不丢失信息的情况下再次强制转换.现在,所有这些都是C标准所不能保证的,所以严格来说我的代码是不可移植的.但是,它们在我目前正在瞄准的体系结构和ABI上都是正确的,经过仔细考虑之后,我已经确定他们未能在某些架构上保留的风险,我将来需要将其作为目标.与我现在做出假设所得到的实用好处相比.
问题是:我如何最好地记录这一决定?我的许多假设都是由几乎每个人(非八位字节char或符号幅度整数?未来,商业上成功的架构?)制定的.其他人更有争议 - 最危险的可能是关于函数指针的问题.但是,如果我只列出一切我认为超出标准给我,读者的眼睛只是要呆滞,他可能没有注意到,实际上很重要的人.
那么,是否有一些众所周知的关于成为"有点正统"的架构的假设,我可以通过引用合并,然后只明确记录我甚至超出的范围?(实际上这样的"概况"将定义一种新的语言,它是C的超集,但它可能不会承认这么多的话 - 而且它也可能不是一种实用的方法来考虑它).
澄清:我正在寻找一种记录我的选择的简写方式,而不是一种自动测试给定编译器是否符合我的期望的方法.后者显然也很有用,但并不能解决所有问题.例如,如果业务合作伙伴联系我们说:"我们正在制作基于Google新G2015芯片的设备;您的软件会在其上运行吗?" - 那么能够回答"我们还没有使用过那个拱门,但如果它有一个满足这样的C编译器就不应该是一个问题".
澄清甚至更多,因为有人投票决定关闭"不具有建设性":我不是在这里寻求讨论,只是为了指向实际的,现有的,正式的文件,可以通过引用并入我的文档.
我正在使用doxygen来评论我的C代码.我正在使用外部API(即不是我自己的),文档很少,所以我打算在我自己的源文件中记录一些API.我确实有外部API的头文件,但将我自己的注释添加到该文件是不切实际的.
外国标题
struct foreignstruct
{
int a;
int b;
};
Run Code Online (Sandbox Code Playgroud)
我的标题
/** My structure comments...
struct mystruct
{
/** Describe field here... */
int field;
};
/** @struct foreignstruct
* @brief This structure blah blah blah...
* @??? a Member 'a' contains...
* @??? b Member 'b' contains...
*/
Run Code Online (Sandbox Code Playgroud)
我在的地方用什么标签@???,以获得正确的doxygen输出(其中"正确"的方法产生输出,mystruct并且foreignstruct是相同的)?
我在查明几个英特尔SSE操作的NEON等效性时遇到了一些麻烦.看起来NEON不能同时处理整个Q寄存器(128位值数据类型).我没有在arm_neon.h头文件或NEON内在函数参考中找到任何内容.
我想做的是以下内容:
// Intel SSE
// shift the entire 128 bit value with 2 bytes to the right; this is done
// without sign extension by shifting in zeros
__m128i val = _mm_srli_si128(vector_of_8_s16, 2);
// insert the least significant 16 bits of "some_16_bit_val"
// the whole thing in this case, into the selected 16 bit
// integer of vector "val"(the 16 bit element with index 7 in this case)
val = _mm_insert_epi16(val, some_16_bit_val, 7);
Run Code Online (Sandbox Code Playgroud)
我已经看过NEON提供的转换操作,但找不到相同的方法来做上述事情(我对NEON没有多少经验).是否有可能做到以上(我想这是我只是不知道如何)?任何指针都非常感激.
我正在运行一个教育网站,教孩子们(12-15岁).
因为他们并不都在解决方案的代码源中说英语,所以我们使用法语变量和函数名称.但是,我们计划将内容翻译成其他语言(德语,西班牙语,英语).为此,我想尽快翻译源代码.我们大多数都有C/C++代码.
我打算使用的解决方案:
是否已经有一些开源代码/项目可以做到这一点?(对于第1,2和4点)
如果没有,那么第一个中最困难的一点是:使用C/C++解析器构建一个语法树然后用它们的位置提取变量似乎是要走的路.你有其他想法吗?
谢谢你的任何建议.
编辑: 如评论中所述,我还需要处理注释,但只有少数几个:完整的解决方案已经用纯文本解释,然后我们用自解释的变量显示代码源/函数名称.源代码很少超过30/40行,如果您已经知道代码在做什么,那么好的名称必须使它在没有注释的情况下可以理解.
附加信息:对于感兴趣的人来说,网站是国际奥林匹克信息学和C/C++的培训平台(至少是编程竞赛所需的最低限度),12岁时学习并不困难.
#include <stdio.h>
int main()
{
int a=8,b=9,c;
c=a+++b;
printf("%d%d%d\n",a,b,c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的程序输出a=9 b=9和c=17.在a+++b为什么编译器会a++,然后用增加b.为什么不考虑a +和
++b?是否有特定的名称a+++b.请帮我理解.
我一整天都试图绕过这个......
基本上,我有一个名为State的结构,它有一个名称,另一个名为StateMachine,带有名称,状态数组和添加的状态总数:
#include <stdio.h>
#include <stdlib.h>
typedef struct State {
const char * name;
} State;
typedef struct StateMachine {
const char * name;
int total_states;
State ** states;
} StateMachine;
StateMachine * create_state_machine(const char* name) {
StateMachine * temp;
temp = malloc(sizeof(struct StateMachine));
if (temp == NULL) {
exit(127);
}
temp->name = name;
temp->total_states = 0;
temp->states = malloc(sizeof(struct State));
return temp;
}
void destroy_state_machine(StateMachine* state_machine) {
free(state_machine);
}
State * add_state(StateMachine* state_machine, const char* name) {
State * …Run Code Online (Sandbox Code Playgroud) 我有兴趣编写一个getMyByteChunkFunction接受两个参数的函数- 一个32位整数和一个字节偏移量(0,1,2或3),然后从32位整数中返回相应的字节.例如,给定此整数:
(3) (2) (1) (0) ---byte numbers
int word = 10101010 00001001 11001010 00000101
Run Code Online (Sandbox Code Playgroud)
函数调用getMeByteChunkFunction(word, 2)返回00001001.
但是,我可以使用的按位运算符有限.我只允许使用>>,<<以及只有一个减法.我知道如何使用AND和XOR来做到这一点,但我不知道我在这里如何使用减法.有任何想法吗?
我学习了如何使用lame_encode_buffer_interleaved这个问题将wav编码为mp3 :是否有任何LAME c ++ wraper\simplifier(在Linux Mac上工作,从纯代码中获胜)?
现在我想将mp3解码回wav.我知道有,lame_decode但我不知道如何使用它,因为它需要两个pcm缓冲区(pcm_l和pcm_r).我不明白如何将它们组合成一个格式良好的wav文件,因为我真的不知道它们是如何工作的.
现在有人可以提供一个简单的工作示例,使用C/C++中的lame将mp3解码为wav吗?
谢谢.
如果我存储指向函数的指针,然后在程序执行期间的某个稍后点,将它与同一函数的地址进行比较,两个地址是否保证相等.
例如
int foo(void){return 0;}
int (*foo_p)(void) = &foo;
assert(foo_p == &foo);
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,断言始终保证成功吗?是否有任何情况下函数的地址可以改变?