编辑:显然其中一些不允许/已在各种C标准中发生变化.对于我自己的假设好处,让我们假装我们使用gcc test.c
没有标准或警告选项.
特别是我正在研究引擎盖下的细节.我加入了目前的理解.我对吗?
char **c1; //Size for a pointer is allocated on the stack. sizeof(c1) == sizeof(void*)
char *c2[0]; //Nothing is allocated on the stack. sizeof(c2) == 0
Run Code Online (Sandbox Code Playgroud)
这两个我不知道的情况(除了sizeof)还有其他的区别吗?
struct a {
int i;
char c[0]; //sizeof(a) is sizeof(int)? a.c == (&i)+1?
};
Run Code Online (Sandbox Code Playgroud)
据我了解,这通常用于结构末端的可变长度数组.但是关于
struct b {
char *c[0] //sizeof(b) is 0? where does c point?
};
int j;
struct b myb; //myb.c == (&j)+1 == $esp?
Run Code Online (Sandbox Code Playgroud)
如果零指针的地址从未在任何地方分配,那么零长度数组的地址如何知道呢?我认为常规数组的地址已知的方式相同,但我现在正在努力绕过它.
如果我有一个接收来自其他进程的信号的进程,有没有办法让我以某种方式告诉哪个进程(如果有的话)发送了一个信号?
strace
让我跟踪一个进程收到的信号,但不允许我跟踪发出进程的信号.
我一直在使用一个主要由不再在公司工作的程序员编写的大型代码库.其中一位程序员显然在他心中有一个特殊的位置,用于非常长的宏.我可以看到使用宏的唯一好处是能够编写不需要在所有参数中传递的函数(建议在我阅读的最佳实践指南中使用).除此之外,我认为内联函数没有任何好处.
有些宏是如此复杂,我很难想象有人甚至写它们.我尝试用这种精神创造一个,这是一场噩梦.调试是非常困难的,因为它在调试器中将N +行代码变为1(例如,在这个大块代码中的某处存在段错误.祝你好运!).我必须实际拉出宏并运行它非宏观调试它.我能看到这个人编写这些内容的唯一方法是在调试之后通过函数自动生成它们(或者比我聪明并且第一次完美地编写它,这总是可能的) .
我错过了什么吗?我疯了吗?有没有我不知道的调试技巧?请填写我.我真的很想听听观众中的宏观爱好者.:)
使用了什么系统调用?我想用它来读取散布在不同进程的地址空间内的内存位置.这是这种机制的合理用例吗?
我想自动将GTK_WINDOW移动到屏幕上.目前我有一个绘制/移动循环,但这非常不稳定.我对GTK编程(以及一般的gui编程)非常陌生.我错过了什么?
这是一些示例代码,用于了解我想要的内容.
int regular_function(void)
{
int x,y,z;
/** do some stuff **/
my_api_call();
return x;
}
...
void my_api_call(void)
{
char* caller = get_caller_file();
int line = get_caller_line();
printf("I was called from %s:%d\n", caller, line);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法实现get_caller_file()
和get_caller_line()
?我见过/使用技巧,例如#define
荷兰国际集团my_api_call
作为一个函数调用传入__FILE__
和__LINE__
宏.我想知道是否有办法在运行时而不是编译时访问该信息(假设它存在)?像Valgrind这样的东西是不是必须做这样的事情才能获得它返回的信息?
我最近添加了这条线
(set-default-font "-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1")
Run Code Online (Sandbox Code Playgroud)
到我的.emacs文件.之后find-file-other-window
总是打开一个新窗口而不是利用现有的窗口.为什么会这样呢!?我该如何解决?
我不明白所有这些font-config魔法是如何工作的,所以如果真的很明显我很抱歉.
编辑:我有一个非常大的分辨率,我的字体大小已经显着下降.是否find-file-other-window
考虑了可用的字符空间?也许它正在决定,只要打开窗户就可以买得太多了.
语境:
我有一个使用 HEVC 编码生成 mp4 的应用程序。我想将它们转换为 AVC 以用于基于浏览器的显示。我想要使用它的一个非常重要的部分是保留精确的 PTS 时间,因为这就是我们将帧与视频中未包含的其他数据流相关联的方式。
问题:
如何使 ffmpeg 在转码过程中保留此信息?所有明显的标志似乎都没有效果,ffmpeg 只是做它想做的事。
$ ffprobe -show_streams original.mp4 2>/dev/null | grep time_base
codec_time_base=16666667/500000000
time_base=1/1000
Run Code Online (Sandbox Code Playgroud)
这是我的转换命令:
$ ffmpeg -i original.mp4 -copyts -copytb 0 test.mp4
Run Code Online (Sandbox Code Playgroud)
及其结果:
$ ffprobe -show_streams test.mp4 2>/dev/null | grep time_base
codec_time_base=1/60
time_base=1/15360
Run Code Online (Sandbox Code Playgroud)
我希望 time_bases 匹配。执行时帧的 PTS 也不匹配ffprobe -show_frames
编辑:@Gyan 建议使用 -video_track_timescale,但这没有得到我正在寻找的确切行为:
$ sdiff <(ffprobe -show_frames test.mp4 | grep pkt_pts_time) <(ffprobe -show_frames original.mp4 | grep pkt_pts_time)
pkt_pts_time=0.000000 pkt_pts_time=0.000000
pkt_pts_time=0.033000 pkt_pts_time=0.033000
pkt_pts_time=0.067000 | pkt_pts_time=0.066000
pkt_pts_time=0.100000 pkt_pts_time=0.100000
pkt_pts_time=0.133000 pkt_pts_time=0.133000 …
Run Code Online (Sandbox Code Playgroud)