小编Mar*_*son的帖子

这两种风格的C函数指针定义有何不同?

我不小心在不同的地方使用了两种不同风格的C函数指针定义,并决定编写一个最小程序来测试这些差异.

这两种风格是:

int (comp (int))
Run Code Online (Sandbox Code Playgroud)

int (*comp)(int)
Run Code Online (Sandbox Code Playgroud)

我编写了一个最小程序,它将这两个样式用于同一个函数指针,一个用于声明一个函数,一个用于定义相同的函数,以查看编译器对此有何看法.

宣言:

int a_or_b (int (*a_fn)(), int (b_fn()), int (*comp)(int));
Run Code Online (Sandbox Code Playgroud)

定义:

int a_or_b (int (a_fn()), int (*b_fn)(), int (comp(int)))
{
    int out = a_fn ();
    if (comp (out))
        out = b_fn ();
    return out;
}
Run Code Online (Sandbox Code Playgroud)

正如您所希望的那样,对于声明中的第一个参数,我使用了样式int (*a_fn)(),而在函数的定义中,我使用了样式int (a_fn ()).我用接下来的两个参数做了类似的事情.

我推测这些可能是不兼容的类型,这些样式可能是变量的pass-by-reference和pass-by-value赋值之间的区别,但是当我编译这个程序时,编译器默默地并愉快地编译它.没有错误,没有警告,没有.

正如我已经看到很多提倡第二种风格的教程,虽然我个人更喜欢第一种用于美学目的的风格,但我对这两种风格之间的差异感兴趣并且推荐使用.

完整代码示例:

#include <stdio.h>

int a ();
int b ();
int a_or_b (int (*a_fn)(), int (b_fn()), int (*comp)(int));

int a ()
{
    return 1; …
Run Code Online (Sandbox Code Playgroud)

c pointers function-pointers

8
推荐指数
1
解决办法
113
查看次数

在Javascript中,是否可以将两次样式属性添加到元素中?

给定一个HTML Element对象,是否可以两次添加相同的样式属性而不必诉诸字符串操作?

请考虑以下示例:

<div style="width: 90%; width: calc(100% - 5em);"></div>
<h1 style="font-weight: bold; font-weight: 800;"></h1>
<p style="color: #cccccc; color: rgba(255, 255, 255, 0.8);"></p>
Run Code Online (Sandbox Code Playgroud)

据我所知,通过.style属性(例如element.style.color = "blue")或.style.setProperty方法(例如element.style.setProperty("color", "blue"))设置样式会覆盖现有的样式属性而不是附加它们.

拥有相同属性的多个定义允许我们利用CSS的级联性质,让我们在可用时使用更现代的CSS属性值,同时优雅地回归到"足够好"的值,其中不支持更新的添加.但是,我能看到做这样的事情的唯一方法是通过手动字符串操作.

html javascript css

5
推荐指数
1
解决办法
713
查看次数

为什么在Javascript的array.forEach回调中提供数组参数?

JavaScript的数组迭代功能(forEach,every,some等),让您通过三个参数:当前项,当前索引和阵列在其上操作.

我的问题是:作为参数操作数组有什么好处,而不是通过闭包来访问它?

我为什么要用这个:

myArray.forEach(function(item, i, arr) {doSomething(arr);});
Run Code Online (Sandbox Code Playgroud)

而不是这个:

myArray.forEach(function(item, i) {doSomething(myArray);});
Run Code Online (Sandbox Code Playgroud)

javascript arrays closures

4
推荐指数
1
解决办法
432
查看次数

为什么 `(char)~0` 和 `(unsigned char)~0` 返回不同宽度的值?

我在编写一个程序试图打印 UTF-8 字符的组成字节值时遇到了这个问题。

这是我为测试各种操作而编写的程序~0

#include <stdio.h>

int main()
{
    printf("%x\n", (char)~0); // ffffffff
    printf("%x\n", (unsigned char)~0); // ff
    printf("%d\n", sizeof(char) == sizeof(unsigned char)); // 1
    printf("%d\n", sizeof(char) == sizeof(unsigned int)); // 0
    printf("%d\n", (char)~0 == (unsigned int)~0); // 1
}
Run Code Online (Sandbox Code Playgroud)

我正在努力理解为什么当char产生int- 大小的值时会unsigned char产生 -char大小的值。

c char integer-promotion unsigned-integer signed-integer

4
推荐指数
1
解决办法
357
查看次数

如何仅使用POSIX函数来清理整个POSIX树?

用填充POSIX二叉树后tsearch,如何清理整个树呢?GCC提供tdestroy了扩展功能,但是如果您想使用仅POSIX的功能,该怎么做?

我当前的实现使用twalk遍历树,并在endorderleaf节点上调用tdelete,但这可以理解地显示有关const正确性的警告:

static void free_tree(const void *node, const VISIT which, const int depth)
{
        struct search_entry *entry;
        switch (which) {
                case endorder:
                case leaf:
                        entry = *(struct search_entry **)node;
                        tdelete(entry->key, &node, search_entry_compare);
                        free(entry);
        }
}
Run Code Online (Sandbox Code Playgroud)

对于符合POSIX的应用程序,预期的方法是什么?

c posix

3
推荐指数
1
解决办法
81
查看次数