如果有一些跨平台的C/C++代码应该在Mac OS X,iOS,Linux,Windows上编译,我如何在预处理器进程中可靠地检测它们?
由同事作为一个谜题,我无法弄清楚这个C程序实际上是如何编译和运行的.什么是这个>>>=运算符和奇怪的1P1文字?我在Clang和GCC进行了测试.没有警告,输出是"???"
#include <stdio.h>
int main()
{
int a[2]={ 10, 1 };
while( a[ 0xFULL?'\0':-1:>>>=a<:!!0X.1P1 ] )
printf("?");
return 0;
}
Run Code Online (Sandbox Code Playgroud) 首先,这里是一些代码:
int main()
{
int days[] = {1,2,3,4,5};
int *ptr = days;
printf("%u\n", sizeof(days));
printf("%u\n", sizeof(ptr));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法找出ptr指向的数组的大小(而不是仅仅给出它的大小,在32位系统上是4个字节)?
在C中,似乎有零各个值之间的差- NULL,NUL和0.
我知道ASCII字符的'0'计算结果为48或0x30.
该NULL指针通常定义为:
#define NULL 0
Run Code Online (Sandbox Code Playgroud)
要么
#define NULL (void *)0
Run Code Online (Sandbox Code Playgroud)
另外,也有似乎评价的NUL人物.'\0'0
是否有时候这三个值不相等?
这在64位系统上也是如此吗?
C和C++中的字符大小是多少?据我所知,char的大小在C和C++中都是1个字节.
#include <stdio.h>
int main()
{
printf("Size of char : %d\n", sizeof(char));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
#include <iostream>
int main()
{
std::cout << "Size of char : " << sizeof(char) << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
没有惊喜,它们都给出了输出: Size of char : 1
现在我们知道,字符表示为'a','b','c','|',...所以我只是修改了上面的代码对这些:
在C:
#include <stdio.h>
int main()
{
char a = 'a';
printf("Size of char : %d\n", sizeof(a));
printf("Size of char : %d\n", sizeof('a'));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Size of char …Run Code Online (Sandbox Code Playgroud) 我在这里浏览strlen代码,想知道是否真的需要代码中使用的优化?例如,为什么下面这样的东西不能同样好或更好?
unsigned long strlen(char s[]) {
unsigned long i;
for (i = 0; s[i] != '\0'; i++)
continue;
return i;
}
Run Code Online (Sandbox Code Playgroud)
较简单的代码对编译器进行优化是否更好或更容易?
strlen链接后面页面上的代码如下所示:
Run Code Online (Sandbox Code Playgroud)/* Copyright (C) 1991, 1993, 1997, 2000, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Torbjorn Granlund (tege@sics.se), with help from Dan Sahlin (dan@sics.se); commentary by Jim Blandy (jimb@ai.mit.edu). The GNU C Library is free software; you can redistribute it and/or modify it under …
我正在尝试开发/移植游戏到Android,但是它在C中,并且Android支持Java,但我确信必须有一种方法可以在那里获得一个C应用程序,任何人都知道关于这个主题的一个很好的教程?
谢谢!
例如,可以使用位运算符来实现乘法和除法
i*2 = i<<1
i*3 = (i<<1) + i;
i*10 = (i<<3) + (i<<1)
Run Code Online (Sandbox Code Playgroud)
等等.
实际上使用say (i<<3)+(i<<1)乘以10比i*10直接使用更快吗?是否有任何类型的输入不能以这种方式倍增或分割?
以下代码在第2行接收seg错误:
char *str = "string";
str[0] = 'z'; // could be also written as *str = 'z'
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)
虽然这非常有效:
char str[] = "string";
str[0] = 'z';
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)
经过MSVC和GCC测试.
我正在阅读一个很棒的OpenGL教程.这真的很棒,相信我.我目前的主题是Z-buffer.除了解释它的全部内容之外,作者还提到我们可以执行自定义深度测试,例如GL_LESS,GL_ALWAYS等.他还解释了深度值的实际含义(顶部是哪个,哪个不是)也可以定制.到目前为止我明白了.然后作者说了一些令人难以置信的事:
zNear的范围可以大于zFar的范围; 如果是,则窗口空间值将根据与观看者最近或最远的内容来反转.
早些时候,据说窗口空间Z值为0,最接近1.但是,如果我们的剪辑空间Z值被否定,则1的深度将最接近视图,0的深度将最远.然而,如果我们翻转深度测试的方向(GL_LESS到GL_GREATER等),我们得到完全相同的结果.所以这真的只是一个惯例.事实上,翻转Z的标志和深度测试曾经是许多游戏的重要性能优化.
如果我理解正确,性能方面,翻转Z的符号和深度测试只不过是将<比较改为>比较.所以,如果我理解正确并且作者没有说谎或做事,那么<改为>以前是许多游戏的重要优化.
是作者胡编,我误解的东西,或者是它确实是曾经的情况下<较慢(至关重要,正如作者说)比>?
谢谢你澄清这个非常奇怪的事情!
免责声明:我完全清楚算法复杂性是优化的主要来源.此外,我怀疑现在肯定没有任何区别,我不是要求它优化任何东西.我非常痛苦,也许是令人望而却步的好奇心.