任何禁用“tempnam'”的方法;危险,最好使用'mkstemp';gcc警告?

任何禁用“tempnam'”的方法;危险,最好使用'mkstemp';gcc警告?,gcc,warnings,Gcc,Warnings,我使用tempnam()只是为了获取目录名,因此此安全警告不适用于我的情况。如何禁用它?我找不到任何开关来执行此操作。您可以使用GCC的-Wno deprecated declarations选项禁用所有类似的警告。不过,我建议您正确处理警告,并采纳编译器的建议。如果您确实只想要目录名,请使用字符串常量宏p\u tmpdir,该宏在的tempnam()中定义函数返回一个指向有效文件名的字符串的指针,这样当选中tempnam()时,具有此名称的文件就不存在了。” 该警告是由于检查和稍后创建文件之间

我使用tempnam()只是为了获取目录名,因此此安全警告不适用于我的情况。如何禁用它?我找不到任何开关来执行此操作。

您可以使用GCC的
-Wno deprecated declarations
选项禁用所有类似的警告。不过,我建议您正确处理警告,并采纳编译器的建议。

如果您确实只想要目录名,请使用字符串常量宏
p\u tmpdir
,该宏在

的tempnam()中定义函数返回一个指向有效文件名的字符串的指针,这样当选中tempnam()时,具有此名称的文件就不存在了。”

该警告是由于检查和稍后创建文件之间的竞争条件引起的

您想只获取目录名吗?那有什么好处呢


正如陌生人已经说过的,您可以使用-Wno不推荐的声明来禁用此功能(以及类似的警告)。

答案是否定的,因为在许多系统上,实现此功能的GNU C库(glibc)经过编译,以便在使用时触发链接器警告

见:

  • -我不久前提交了这个
  • -2010年提交
  • -我不久前提交了这个

请注意,该问题并非特定于GCC-任何链接器都应该发出此警告,其触发器在编译库中是“硬编码”的。

我需要在临时目录中创建一个FIFO文件,因此我使用dirname(tempnam…)对我来说,它不会使此类警告静音。对我来说,它也没有静音,not wIt是在链接而非编译阶段生成的警告,因此此警告无效。(将其交给链接阶段也不起作用)。(至少在g++4.8.2中)