场景是:我使用libexif以"YYYY-MM-DD HH:MM:SS"格式获取日期时间.为了最大限度地降低节省成本,我想将日期时间转换为unix时间戳或类似,仅花费64位或32位.c有什么明确的方法吗?
我试图找出一个问题,因为variadic宏的使用不正常.这是假设宏:
#define va(c, d, ...) c(d, __VA_ARGS__)
#define var(a, b, ...) va(__VA_ARGS__, a, b)
var(2, 3, printf, “%d %d %d\n”, 1);Run Code Online (Sandbox Code Playgroud)
对于gcc,预处理器将输出
printf("%d %d %d\n", 1, 2, 3)Run Code Online (Sandbox Code Playgroud)
但对于VS 2008,输出是
printf, “%d %d %d\n”, 1(2, 3);Run Code Online (Sandbox Code Playgroud)
我怀疑差异是由于对VA_ARGS的不同处理造成的,对于gcc,它首先将表达式扩展为va(printf,"%d%d%d \n",1,2,3),并处理1,2 ,3作为宏va 的VA_ARGS.但对于VS 2008,它将首先将b视为VA_ARGS用于宏va,然后进行扩展.
哪一个是C99可变参数宏的正确解释?或者我的用法属于未定义的行为?
我的问题不是fork()的最佳方案.但是,这是我能得到的最好的功能.
我正在使用Mac OSX上的Firefox插件.为了使其健壮,我需要创建一个新进程来运行我的插件.问题是,当我分叉一个新进程时,就像这样:
if (fork() == 0) exit(other_main());
但是,由于状态未清除,我无法正确初始化我的新进程(调用NSApplicationLoad等).有任何想法吗?顺便说一下,我当然不想创建一个新的二进制文件并执行它.
具体问题是,Windows上条件变量的支持从Vista开始,对于早期版本的Windows(Windows XP),我有一个模拟条件变量代码排序解决了这个问题.但是,我希望能够在系统支持时调用本机条件变量API,并且仅在XP和早期版本上回退到我的版本.我尝试使用GetVersionInfo API检测Windows版本,但它仍然在启动时给出错误(无法找到InitializeConditionVariable排序的API条目).
我不熟悉Windows编程,你如何很好地解决温和的后备问题?