标签: c

C不是那么难:void(*(*f [])())()

我今天刚看了一张照片,觉得我很感激解释.所以这是图片:

一些c代码

我发现这令人困惑,并想知道这些代码是否实用.我用Google搜索了这张照片,并在 reddit条目中找到了另一张照片,是照片:

一些有趣的解释

那么"螺旋式阅读"是有效的吗?这是C编译器解析的方式吗?
如果对这个奇怪的代码有更简单的解释,那就太好了.
除此之外,这些代码是否有用?如果是这样,何时何地?

一个关于"螺旋规则"的问题,但我不只是询问它是如何应用的,或者是如何用该规则读取表达式的.我也质疑这种表达方式的使用和螺旋规则的有效性.关于这些,已经发布了一些很好的答案.

c parsing pointers function-pointers void-pointers

184
推荐指数
10
解决办法
1万
查看次数

在没有/ proc/self/exe的情况下查找当前可执行文件的路径

在我看来Linux使用/ proc/self/exe很容易.但我想知道是否有一种方便的方法可以在C/C++中使用跨平台接口查找当前应用程序的目录.我已经看到一些项目与argv [0]混在一起,但它似乎并不完全可靠.

如果你曾经不得不支持Mac OS X,它没有/ proc /,你会做什么?使用#ifdefs隔离特定于平台的代码(例如NSBundle)?或者尝试从argv [0],$ PATH等等推断出可执行文件的路径,冒着在边缘情况下发现错误的风险?

c c++ linux macos executable

183
推荐指数
7
解决办法
10万
查看次数

为什么GCC为几乎相同的C代码生成如此完全不同的程序集?

在编写优化ftol函数时,我发现了一些非常奇怪的行为GCC 4.6.1.让我先向您展示代码(为清楚起见,我标记了差异):

fast_trunc_one,C:

int fast_trunc_one(int i) {
    int mantissa, exponent, sign, r;

    mantissa = (i & 0x07fffff) | 0x800000;
    exponent = 150 - ((i >> 23) & 0xff);
    sign = i & 0x80000000;

    if (exponent < 0) {
        r = mantissa << -exponent;                       /* diff */
    } else {
        r = mantissa >> exponent;                        /* diff */
    }

    return (r ^ -sign) + sign;                           /* diff */
}
Run Code Online (Sandbox Code Playgroud)

fast_trunc_two,C:

int fast_trunc_two(int i) {
    int mantissa, exponent, …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly gcc compiler-optimization

183
推荐指数
3
解决办法
3万
查看次数

(x ^ 0x1)!= 0是什么意思?

我遇到了以下代码段

if( 0 != ( x ^ 0x1 ) )
     encode( x, m );
Run Code Online (Sandbox Code Playgroud)

什么x ^ 0x1意思?这是一些标准技术吗?

c c++ bit-manipulation bitmask

183
推荐指数
12
解决办法
2万
查看次数

如何制作可变参数宏(可变数量的参数)

我想在C中编写一个宏,它接受任意数量的参数,而不是特定的数字

例:

#define macro( X )  something_complicated( whatever( X ) )
Run Code Online (Sandbox Code Playgroud)

哪里X有任何数量的参数

我需要这个,因为它whatever是重载的,可以用2或4个参数调用.

我试过两次定义宏,但第二个定义覆盖了第一个!

我正在使用的编译器是g ++(更具体地说,mingw)

c g++ variadic c-preprocessor

182
推荐指数
5
解决办法
18万
查看次数

我可以在C或C++中使用二进制文字吗?

我需要使用二进制数.

我试着写:

const x = 00010000;
Run Code Online (Sandbox Code Playgroud)

但它没有用.

我知道我可以使用具有相同值的十六进制数字00010000,但我想知道C++中是否存在二进制数的类型,如果没有,是否有另一种解决方案可以解决我的问题?

c c++ binary

182
推荐指数
13
解决办法
34万
查看次数

gcc/g ++是如何引导的?

这一直困扰着我.gcc/g ++如何编译自己?我猜测每个修订版都使用以前构建的修订版进行编译.这是真的?如果是的话,是否意味着最古老的g ++/gcc版本是用汇编语言编写的?

c c++ compiler-construction

182
推荐指数
2
解决办法
2万
查看次数

如何在Objective-C中定义和使用ENUM?

我在我的实现文件中声明了一个枚举,如下所示,并在我的接口中将该类型的变量声明为PlayerState thePlayerState; 并在我的方法中使用了变量.但是我收到错误声明它是未声明的.如何在我的方法中正确声明和使用PlayerState类型的变量?:

在.m文件中

@implementation View1Controller

    typedef enum playerStateTypes
        {
            PLAYER_OFF,
            PLAYER_PLAYING,
            PLAYER_PAUSED
        } PlayerState;
Run Code Online (Sandbox Code Playgroud)

在.h文件中:

@interface View1Controller : UIViewController {

    PlayerState thePlayerState;
Run Code Online (Sandbox Code Playgroud)

在.m文件中的某些方法中:

-(void)doSomethin{

thePlayerState = PLAYER_OFF;

}
Run Code Online (Sandbox Code Playgroud)

c iphone objective-c

181
推荐指数
6
解决办法
17万
查看次数

警告:隐式声明函数

我的编译器(GCC)给了我警告:

警告:隐式声明函数

请帮我理解为什么会这样.

c compiler-warnings

180
推荐指数
3
解决办法
59万
查看次数

read()和recv()之间有什么区别,send()和write()之间有什么区别?

read()和recv()之间的区别,以及socket编程中send()和write()之间的区别是什么?性能和速度等行为.

c unix sockets posix network-programming

179
推荐指数
6
解决办法
9万
查看次数