问题标签 [sus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
447 浏览

c - 允许自定义 printf 的 %n$ 操作数

我有一个 printf 的自定义实现,我在学校项目中使用它。希望得到与 printf 相同的警告,我使用__attribute__((format (printf ...)). 这工作正常,但使用-Wall -Wextra -Werror -std=c11 -pedantic-errors,我得到ISO C does not support %n$ operand number formatsgcc 7.2.0 上的错误。(我的实现支持该格式)。在铿锵声中,如果我使用它不会发出警告std=c11,但会发出警告std=c99

该格式是 c11 规范的一部分(就像我认为的 clang 行为)还是只是 Singe Unix 规范(这就是我的手册页所说的)?如果是这样,我该如何使用它?在此页面中,我找不到它作为选项std

我宁愿不禁用任何警告,因为它们非常有用并且捕获了很多。但是有没有办法在格式字符串中允许这种格式,或者只为我的函数指定?

非常感谢。

PS:我使用 printf 的自定义实现,因为在我的学校项目中,我们必须只使用特定允许的功能(基本上,系统 api,如,malloc等),或者我们自己完成的那个。freeread

编辑:作为参考,格式%n$n非零数字的数字字符串,允许访问提供给 printf 的变量参数列表中该索引处的参数(从 1 开始)。(并且可以用于转换本身或用于*操作数的精度或字段宽度)。

0 投票
2 回答
324 浏览

c - sigwait() 在 macOS 和 Linux 中的行为是否不同?

我发现以下代码在 macOS 和 Linux 中的工作方式不同:

当在 macOS 上运行并将 SIGINT 发送到进程时,其处理程序仅在发送 SIGHUP 后执行(从而导致 sigwait() 返回)。换句话说,它看起来 sigwait() 在其等待期间阻塞了其等待掩码之外的所有信号。当同一个程序在 Linux 上运行时,只要将 SIGINT 发送到进程,就会传递 SIGINT,即运行处理程序。因此它在 Linux 中看起来 sigwait() 不会阻塞其等待掩码之外的信号。哪个是标准行为?SUSv3 没有说清楚。

0 投票
1 回答
473 浏览

posix - 重置getopt()的便携式方法是什么?

在真正的 argv 上使用它之后,我将机器瞄准getopt()我自己的类似 argv 的阵列。该接口是不可重入的(保持状态),并且各种实现以不同的方式重置。

  • 在 XPG3/SVID 中是optreset = 1;(freebsd, macosx)
  • 在 XPG4/POSIX/SUS 中是optind = 1;(suse tumbleweed)
  • 在 Linux/GLIBC 它也是optind = 0;(debian)

我不想仅仅为此而自动配置。

什么是可靠的集合#ifdef