- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想使用自定义 printf 格式标志(通过 gcc 的 register_printf_specifier
),同时仍然享受 -Wformat
和 -Werror
编译器的好处旗帜。
在下面的示例中,我设法使用自定义 %W
标志打印我的小部件,但我必须禁用 -Wformat
和 -Wformat-extra -args
#pragma GCC diagnostic ignored "-Wformat"
#pragma GCC diagnostic ignored "-Wformat-extra-args"
有没有可能两全其美?
我想我的问题归结为:有没有办法用 -Wformat
注册格式说明符和关联类型?
#include <cstdio>
#include <cstdlib>
#include <printf.h>
struct Widget
{
const char* name;
};
int print_widget(FILE* stream, const struct printf_info* info, const void* const* args)
{
const Widget* widget = *((const Widget**)(args[0]));
return fprintf(stream, "%*s", (info->left ? -info->width : info->width), widget->name);
}
int print_widget_arginfo(const struct printf_info*, size_t n, int* argtypes, int* size)
{
if (n > 0)
{
argtypes[0] = PA_POINTER;
size[0] = sizeof (Widget *);
}
return 1;
}
int main(void)
{
register_printf_specifier('W', print_widget, print_widget_arginfo);
Widget widget { "foobar" };
#pragma GCC diagnostic ignored "-Wformat"
#pragma GCC diagnostic ignored "-Wformat-extra-args"
printf("|%W|\n", &widget);
printf("|%35W|\n", &widget);
printf("|%-35W|\n", &widget);
}
|foobar|
| foobar|
|foobar |
最佳答案
目前没有这种方式。参见 this gcc bug .
修改 GCC 以公开其内部机制以供 printf
检查并不难太,从而可以编写理解您的添加的 GCC 插件。不过,它确实需要对 GCC 有一点熟悉。
关于c++ - gcc:混合 -Wformat 和 register_printf_specifier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29160437/
我在网上看到很多关于 -Wformat=2 的提及Clang 的选项,有时与已知的 -Wformat 一起使用(Xcode 列为“Typecheck 调用 printf/scanf 的那个,尽管它现在
这个问题已经有答案了: How to stop GCC complaining about "directive output may be truncated" in snprintf() call
我正在使用this approach将十六进制字符串转换为字节数组。代码工作正确。编译此代码时,我收到以下编译警告。有什么办法可以解决吗? /* test.c */ #include #includ
我尝试从终端调用时检查并输出为特定程序“ format.c”指定的命令行参数。我收到以下错误,但我不明白它告诉我什么。 错误: 格式指定类型'char *',但 参数的类型为'char'[
我正在用 C (Eclipse IDE) 编写代码,出现此错误 代码是 { printf("\nYour hat size is %c%c%c%%c\n",size[0][i],size[1][i],
fprintf(fptr2,"\n\n:%s",ctime(&t),"\t ","\t"); 这条线在开发中运行良好,但在 ubuntu 中运行不正常,因为它会产生以下错误 warning: too
我正在为学校做一个项目,这个警告一直困扰着我。我的代码有什么问题? fprintf(fp,"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%d\n", Item[i]->ID, Item[i
我不确定是什么导致了这个错误 ./lhapdf_wrap.cc: In function ‘void SWIG_Python_AddErrorMsg(const char*)’: ./lhapdf_w
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
这个问题在这里已经有了答案: How do I add a linker or compile flag in a CMake file? (8 个答案) 关闭 6 年前。 我正在使用 CMake
我在运行这段代码时收到上述警告。我有点不确定,因为它在 mac OS 环境中运行良好,但是一旦我在 linux 中运行它,它就停止工作了。 while(sscanf(page.ptr, "%[^\n]
我想使用自定义 printf 格式标志(通过 gcc 的 register_printf_specifier),同时仍然享受 -Wformat 和 -Werror 编译器的好处旗帜。 在下面的示例中,
这个问题在这里已经有了答案: How to escape the % (percent) sign in C's printf (13 个回答) 8 年前关闭。 我写了一个 C 程序,它给出了以下编译
当我尝试编译时,我收到以下警告: warning: spurious trailing ‘%’ in format [-Wformat=] warning: too many arguments fo
我们清理了大量警告。在某些情况下,我们将 %s 替换为 %d。一切似乎都很好,直到我们意识到生成的代码无法编译 - 字符串已被数字替换。 注意:我在复制和粘贴时检查了错误的修订版。 fprintf 字
我有一个软件正在尝试运行。它是 2008 年写的,我已经修复了很多问题,但仍然有很多这样的问题出现。我已经搜索了又搜索,但没有找到任何相关的答案。这是代码部分:/* 应用 */ aa = 0x80c4
我对此很陌生,我不知道为什么它不起作用。我可以运行它,但它不会计算任何东西。我正在使用 C 并且我已经放置了 #include printf("X1 es igual a:\n", (-b+sqrt
#include #include #include #include int main() { FILE *bp=NULL; bp = fopen("binary.txt"
我遇到了两个错误。我在网站上进行了搜索,发现转换类型字符和太多参数错误来自 sscanf 和 printf,它们发生在我的文件中的第 166 和 186 行。代码。 代码处理从文本文件收集的一些信息(
我是一名优秀的程序员,十分优秀!