我很久以前在一个论坛里偶然发现了一个有趣的问题,我想知道答案.
考虑以下C函数:
#include <stdbool.h>
bool f1()
{
int var1 = 1000;
int var2 = 2000;
int var3 = var1 + var2;
return (var3 == 0) ? true : false;
}
Run Code Online (Sandbox Code Playgroud)
这应该总是返回false
自var3 == 3000
.该main
函数如下所示:
#include <stdio.h>
#include <stdbool.h>
int main()
{
printf( f1() == true ? "true\n" : "false\n");
if( f1() )
{
printf("executed\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
由于f1()
应该总是返回false
,人们会期望程序只能在屏幕上打印一个false.但是在编译并运行它之后,还会显示执行:
$ gcc main.c f1.c -o test …
Run Code Online (Sandbox Code Playgroud) 当我运行此命令时:
ffmpeg -y -i ./in.mp4 -c:v png -f image2pipe -thread_queue_size 1024 -r 25 -t 186.75 -i - -filter_complex overlay=0:0 -c:v libx264 -pix_fmt yuv420p -movflags +faststart ./out.mp4 < ./out.png
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
(git)-[master]
ffmpeg version 2.8.11-0ubuntu0.16.04.1 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse …
Run Code Online (Sandbox Code Playgroud) 我想我们已经使用gnuplot
了几十年.但是仍然没有好的方法来获得良好的视频输出gnuplot
,对吗?我所做的是制作了大约30,000张图片(我必须使它具有良好的质量,以获得视频清晰度),然后用于ffmpeg
制作视频:
ffmpeg -f image2 -r 10.0 -i capture.%d.png -qscale 1 filename.mp4
Run Code Online (Sandbox Code Playgroud)
但有一段时间我陷入其中或者需要很长时间.我们可能总是需要一个高质量和低文件大小的视频输出,为什么没有人试图做任何事情,或者有没有其他方法来制作视频输出gnuplot
?我真的很难用高质量的视频制作gnuplot
.
我正在努力为以下问题找到一个好的解决方案:
我想实现一个函数,它接受可变数量的容器参数并返回最大容器的大小.这是一个例子:
std::vector<std::string> vStr(2, "foo");
std::vector<int> vInt(1, 123);
std::vector<double> vDouble(3, 1.1);
std::list<char> lChar(4, '*');
// or even more container
size_t uiMaxSize = getMaxContainerSize(vStr, vInt, vDouble, lChar /*, ...*/);
Run Code Online (Sandbox Code Playgroud)
在这种情况下getMaxContainerSize
应返回4,因为lChar
最大尺寸为4.
我已经使用以下方法实现了此解决方法cstdarg
:
#include <cstdarg>
...
size_t getMaxContainerSize(int iCnt, ... )
{
size_t uiMaxSize = 0;
va_list ap;
va_start(ap, iCnt);
for(int i=0; i<iCnt; i++)
{
size_t uiTempSize = va_arg(ap, size_t);
uiMaxSize = uiMaxSize<uiTempSize ? uiTempSize : uiMaxSize;
}
va_end(ap);
return uiMaxSize;
}
...
size_t uiMaxSize = getMaxContainerSize( …
Run Code Online (Sandbox Code Playgroud)