c99

清理 C/C++ 代码揭示了可变参数宏的问题

我们正在对 C、C++ 和 Java 的代码库进行一些代码清理、修复有符号/无符号比较、运行静态分析等。 我们收到的警告之一是 warning: ISO C does not permit named variadic macros 及其伴随的警告 warning: ISO C99 requires rest arguments to be used 现在,在 C 代码中,我使用 C... »

c++

是否可以迭代可变参数宏中的参数?

我想知道是否可以在 C99 中迭代传递给可变参数宏的参数或使用任何 GCC 扩展? 例如是否可以编写一个通用宏,将结构及其字段作为参数传递并打印结构中每个字段的偏移量? 类似这样的: 结构一个{ 诠释一个; 诠释 b; 诠释 c; }; /* PRN_STRUCT_OFFSETS 将打印每个字段的偏移量 作为第一个参数传递的结构内。 */ int main... »

c

MinGW 错误“未定义对 'typeof'' 的引用”

我得到一个“对'typeof'的未定义引用”-错误​​编译和链接: #include <stdio.h> #include <stdlib.h> #include <stddef.h> int main() { typeof(5); return 0; } gcc 版本为 4.3.3,命令行为“gcc.exe -std=c99 1.c -... »

c

捕获 c bool 的错误用法

在一个 C 项目中(OpenVPN 是有问题的项目,提交 4029971240b6274b9b30e76ff74c7f689d7d9750)我们模拟了 bool typedef int bool; #define false 0 #define true 1 现在切换到 C99 bool #include <stdbool.h> 但是在项目中 somewhere 对 bo... »

c

uintptr_t/intptr_t 等价于指向函数的指针?

Afaik uintptr_t 和 intptr_t 可用于保存任何指向 void 的指针。因此,这些类型可用于存储指向数据的指针。 在 C99 或更高版本中,是否有类似的有符号和无符号整数类型能够保存指向函数的指针? ... »

c

C中的块语句、逗号和控制表达式

我尝试阅读标准的相关部分(c99 的第 6.5 和 6.8 节),但这让我更加困惑并且没有明确的答案。这是有问题的代码: #include <stdio.h> #include <time.h> int t; #define block {\ int temp = 1; \ t = time(NULL); \ if (t == (time_t) ... »

c

C:将 int 转换为 size_t

在 32 位和 64 位 Linux 平台上,在 C99 中将 int 转换/转换为 size_t 的正确方法是什么? 例子: int hash(void * key) { //... } int main (int argc, char * argv[]) { size_t size = 10; void * items[size]; //... v... »

c

在 RU 模式下使用 FPU 计算 RD(sqrt(x))

浮点边界的区间可用于过度近似实数集,只要任何结果区间的上限是向上舍入计算的,而下限是向下舍入计算的。 一个推荐的技巧是实际计算下界的否定。这允许 FPU 始终保持向上舍入(例如,“Handbook of Floating-Point Arithmetic”,2.9.2)。 这适用于加法和乘法。另一方面,平方根运算在加法和乘法方面是不对称的。 我突然想到,为了计算 sqrtRD,对于下限,以下... »

c

标头中的 EXPORT_SYMBOL 导致“导出两次”错误

我有一个头文件,其中声明了几个全局变量,格式如下: constants.h #ifndef CONSTANTS_H #define CONSTANTS_H extern unsigned var; EXPORT_SYMBOL(var); #endif constants.c #include "constants.h" unsigned var = 10; foo.c #inc... »

c

回文仅在末尾比较标点符号,使用指针

这是我用 c 制作的回文检查器。它适用于所有输入,无论它们是否有标点符号,除非最后一项是标点符号。在这种情况下,它不会跳过它并进行比较,然后说它不是回文,而实际上它是。 EX(活过,魔鬼。不会是回文,而是活过,魔鬼会)。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include &... »

c

gcc永久更改c标准

有没有办法告诉 gcc 在编译 c 文件时默认使用 c99 标准? 我想避免一直给它-std=c99 参数。 我假设我可以通过在 .bashrc 文件中创建别名来做到这一点,但似乎相当不雅。 ... »

c

基于变量初始化状态的逻辑参数

假设我们在某处定义了 num(局部变量) int num; 然后,如果初始化,说: num = 420; 我们做某事,如果没有,我们不做。 这在 C99 / c 中是否可能?说明书上找不到。 ... »

c

std::remquo 目的和用法?

std::remquo 函数的用途是什么?什么时候可以使用它来代替常规的 std::remainder 函数? 什么时候还想要商? ... »

c++

如何让夹板忽略我声明变量的位置?

你知道如何让夹板忽略我声明变量的位置吗? 我知道老派的 c 告诉你在 从每个功能开始, 但由于我是一个坏人,我喜欢在我使用它们的地方声明一些东西。 一个很好的例子是把 int i;就在 for(i=0;...) 之前。 我们举一个很简单的例子 #include <stdio.h> int main() { printf("Hello splint test\n"); ... »

c

何时将值隐式转换为指针?

我有很多功能,例如: void write(char* param, int len) { // } 我注意到我几乎从不使用& 运算符作为参数。当我传递一个数组时: char in[20]; write(in, 20); 我不需要它,但是当我传递一个值时: write(5, 1); 我似乎不需要它,当我传递一个指针时: char* in = malloc(20)... »

c

如何省略字符串的点、逗号和空格(检查回文时需要)

我检查回文的程序(使用指针)必须计算几种情况。 输入可以是: 一个符号/字母(完成) 一个带有大写/小写字母的单词(完成) 一堆符号;如果只有符号,那么它总是回文(完成) 如果输入太大(>80),那么它不是回文(我需要使用 fgets,我设法完成了) 字母和符号的组合,如果是,那么就数字母(STRUGGLING WITH) 一个带有白色和逗号的句子 (STRUGGLING WITH) -->... »

c

如何为链接节点列表执行递归函数

你好,我必须实现一个递归函数,输入一个列表的头部,将每个节点的和之后的所有节点相加。 (如果列表是 1->2->3,则它必须变为 6->5->3)然后将所有节点相加,例如变量k 变为 6+5+3 所以k=14。我无法实现它,你能告诉我我该怎么做吗? 谢谢 #include <stdio.h> #include <stdlib.h> typedef struct node... »