我正在使用c并在freeBSD系统上编写此代码.
///// defines /////
#define CPUCORES 2
#define THREADAMOUNT CPUCORES - 1
#define nullptr NULL
///// typedefs /////
typedef enum BOOL_e
{
e_FALSE = 0,
e_TRUE = 1
}BOOL_t;
typedef struct NewClient_s
{
int sdNewClient;
struct sockaddr sdinClientIp;
socklen_t sdlenIPsize;
}NewClient_t;
typedef struct ClientThreadArg_s
{
int iInternID;
NewClient_t sIncommingClient;
BOOL_t bHasKillSig;
BOOL_t bIsShutdown;
}ClientThreadArg_t;
//------------------------------------ imagin this is the main
ClientThreadArg_t *spListOfArguments;
size_t sizeIndexI;
spListOfArguments = (ClientThreadArg_t *) malloc (THREADAMOUNT * sizeof (ClientThreadArg_t));
for (sizeIndexI = 0; sizeIndexI < THREADAMOUNT; …Run Code Online (Sandbox Code Playgroud) 以下程序的输出在gcc上为50.怎么可能因为x是常量变量而*p是x本身,因为p是指向x处的值的常量指针.turbo c给编译器错误的地方.这是一个未定义的行为吗?请解释.
#include<stdio.h>
int main()
{
const int x = 25;
int * const p = &x;
*p = 2 * x;
printf("%d", x);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我刚开始加载一些obj文件并用opengl渲染它.当我渲染这些网格时,我得到了这个结果(见图片).我认为它有某种深度问题,但我不能自己弄明白.这是渲染的参数:
// Dark blue background
glClearColor(0.0f, 0.0f, 0.4f, 0.0f);
// Enable depth test
glEnable( GL_DEPTH_TEST );
// Cull triangles which normal is not towards the camera
glEnable(GL_CULL_FACE);
Run Code Online (Sandbox Code Playgroud)
我使用这个教程代码作为模板.https://code.google.com/p/opengl-tutorial-org/source/browse/#hg%2Ftutorial08_basic_shading

我对C-Code中编译器警告的实际假设实际上是它们警告实现定义的行为类型,或者它们检测到导致未定义行为的构造的情况,然而它们支持它们(如果它们检测到并且不会他们会因为警告而抛出错误.
在我讨论了这个之后,最后证明我错了是这样的:
#include <whatever_this_needs.h>
int main()
{
int i = 50;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
明显警告的编译器i已声明但从未使用过.我不再考虑这种警告,因为我更多地将它们视为一种工具......一种信息.
虽然我会严格地将这种警告从警告我的事情中发出警告,在没有显式强制转换的情况下导致不可移植性或丢弃重要性,但它仍然会引起编译器优化的混乱.
所以我现在感兴趣:是否有任何警告类型的分类?如果没有关于它的标准,有哪些类别,海湾合作委员会将其警告分组?
到目前为止我注意到了(经验再次):
但特别是第二点困扰我,因为有一些结构(即严格的别名规则),其中优化甚至可能导致不可预测的运行时行为,而大多数情况下它只是削减了无论如何都没有使用的代码.
我的观点是否正确?还有哪些(额外的)官方类别可以"强制"警告,它们的特征是什么,它们的影响是什么?
我的代码目前看起来像这样:
glViewport (0, 0, this->w(), this->h());
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
//glTranslated (m_fXmovement, 0.0, m_fZmovement - 5);
//glRotated (m_fYangleView, 1.0, 0.0, 0.0);
//glRotated (m_fXangleView, 0.0, 1.0, 0.0);
///// Model View \\\\\
glMatrixMode(GL_MODELVIEW);
glTranslated (m_fXmovement, 0.0, m_fZmovement - 5 );
glRotated (m_fYangleView, 1.0, 0.0, 0.0);
glRotated (m_fXangleView, 0.0, 1.0, 0.0);
DrawWaveFrontObject (m_pDataObjectMedia);
glPushMatrix();
glTranslated (0.0, -3.0, 0.0);
DrawArea();
glPopMatrix();
DrawClickAnimation();
glLoadIdentity();
Run Code Online (Sandbox Code Playgroud)
首先我在GL_PROJECTION中运动部件,所有都运行良好,直到我使用雾....感觉就像相机没有移动,感觉更像是指向那台相机的额外相机....
然后我意外地将运动部件复制到了GL_MODELVIEW,雾就像我希望它一样行动......一切都很好,接受点击动画不再与该区域有关,现在动画随着我的自我而移动透视....我真的不明白我必须在这两个VIEW中添加什么样的图纸.任何人都可以根据我的代码给我提供示例或解释,或暗示我可以在我的风格中改进什么?
想象一下:
int X;
X = X;
Run Code Online (Sandbox Code Playgroud)
这将是未定义的行为
1在以下情况下,行为未定义:
[...]
具有自动存储持续时间的对象的值在不确定时使用(6.2.4,6.7.8,6.8).
但是这个怎么样?
int X;
X;
Run Code Online (Sandbox Code Playgroud)
X;参考引用的invokation是否允许编译器导致未定义的行为?或者这不算X被"使用"?
根据这篇文章
http://www.mediaevent.de/javascript/globale-lokale-variablen.html
全局变量在JS中非常危险.
对不起,这是德语,但我要指出这篇文章的两个主要陈述.
第一个已经在头部声明的第2段.
它说"在JS全局变量中是危险的,因为它们可以被其他脚本加入名称"到目前为止很好,因为这主要是我想使用全局变量的方式不是吗?
但在文章中听起来这可能是随机发生的.那肯定不是预期的表现,是吗?
但更可怕的是第二句话.它预测如果多次调用声明全局变量的函数,将产生内存泄漏.但如果名称仍然相同,怎么会发生这种情况呢?如何将多个vars声明为全局同名?或者这篇文章可能是由一些人写的"半知识"?或者只是针对一些不习惯全球和本地之间差异的人?或者JS是否真的以这种方式行事?
现在是一个具体的例子:
我想要一些登录我的页面的人创建一个随机生成的令牌并通过单击登录来提交它.在另一个按钮上,我希望这个令牌由不同的函数访问,并且只是对它进行子提交,这样只有新的登录才能重新生成密钥.
对于那个键,我正在考虑使用一个全局变量,该变量由一个函数声明并由另一个函数返回.但是,由于我将生成/重新生成密钥可能超过一次,这会产生内存泄漏吗?或者这篇文章我指的可能只是戏剧化?如果这真的是JS的行为方式,那么在我的情况下,从一个不同的函数中获取变量的好方法是什么?
#if _OWN_DEBUG_LEVEL > 0
void *GetPostArgs(TYPE *Fcgx_Request, FILE *fpDebugPointer)
#else
void *GetPostArgs(TYPE *Fcgx_Request)
#endif
{
...
if (...)
{
return NULL;
}
...
do
{
...
if (...)
{
return NULL;
}
...
}
while (...);
if (...)
{
return NULL;
}
}
Run Code Online (Sandbox Code Playgroud)
这是使用gcc 4.3生成NOT错误的代码的代表代码
但它应该,不应该吗?
我的意思是该函数的两种情况都有返回类型指针.
在身体的最后,没有任何回报.那不合法吗?但代码编译,更有趣的是:当函数被调用并运行到函数体的末尾时,它返回0x80808080.
这可能是由我的代码中未定义的行为引起的吗?
或者这仅仅是一个gcc bug?
或者我可以做一些不同的错误吗?
有没有办法把这样的定义:
#define PUTVAL 0x00
#define foo(x) ("x")
int main()
{
char *szFoo = foo(PUTVAL);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
并通过宏修改它,szFoo会指向包含"0x00"的字符串而不是"x"?
这是我的着色器'triangles.vert':
#version 430 core
layout(location = 0) in vec4 vPosition;
layout(location = 1) in vec4 vColor;
uniform mat4 vRota;
out vec4 color;
void main()
{
color = vColor;
gl_Position = vRota * vPosition;
}
Run Code Online (Sandbox Code Playgroud)
这是C++源代码的片段:
ShaderInfo shaders[] =
{
{ GL_VERTEX_SHADER, "triangles.vert" },
{ GL_FRAGMENT_SHADER, "triangles.frag" },
{ GL_NONE, NULL }
};
GLuint program = LoadShaders(shaders);
glUseProgram(program);
//...
int vRota_loc = glGetAttribLocation(program, "vRota");
if (vRota_loc == -1)
{
cout << "No uniform match for 'vRota'" << endl;
}
Run Code Online (Sandbox Code Playgroud)
它返回-1,但我不知道为什么.
我在着色器中做错了什么? …
阅读本文后:在C++中使用auto声明变量是否存在缺点?
我问自己:真的没有一个回答者知道auto不是一个类型而是存储类说明符.
或者,auto因为C++ 11与普通C中的存储类说明符不同?
如果是这样,这会破坏C和C++之间的兼容性吗?
(我知道他们的官方从来没有相互支持过,但我的经验是C ++委员会试图尽可能接近C,但是现在可以改变现有的关键字而不是过时的.只是添加一个新的.为什么在这里做这样的突破consistens?)
我正在使用德语书(介导的标题)"jQuery the practice book".
在第一个教程中,给定的JS代码是这样的:
$(document).ready(function()
{
$("#box p").click
(
function()
{
$("#box p").removeClass("green");
$(this)
.addClass("green")
.parent()
.removeClass()
.addClass("boxColor-" + $("#box p").index(this));
}
);
});
Run Code Online (Sandbox Code Playgroud)
CSS是这样的:
<style type ="text/css">
p {
cursor:pointer;
}
.green{
color:#009933;
background-color:#E2FFEC;
cursor:default;
}
</style>
Run Code Online (Sandbox Code Playgroud)
HTML是这样的:
<body>
<div id="box">
<p>Erster Absatz</p>
<p>Zweiter Absatz</p>
<p>Dritter Absatz</p>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
让我陷入困境的是jQuery脚本的这一行:
.addClass("boxColor-" + $("#box p").index(this));
Run Code Online (Sandbox Code Playgroud)
本书的教程解释了这个原因,例如"我们可以通过哪种方式获得与p box相关的类?"
但我不清楚那条线上发生了什么?
即使我删除了这一行,我看到的结果仍然是一样的.
那么,这里发生了什么?并且它是否真的有必要?
我想在代码中抑制未处理的参数警告.
我的第一个方法是:
void RenderGraphFrame::mouseReleaseEvent(QMouseEvent *UNUSED(event))
{
MousebuttonHold = false;
updateGL();
return;
}
Run Code Online (Sandbox Code Playgroud)
其定义如下:
#define UNUSED(NAME) USE_IT(NAME)
#define USE_IT(NAME) UNUSED_ ## NAME
Run Code Online (Sandbox Code Playgroud)
这没用.经过一些SO研究后,我发现用C++我可以做到:
void RenderGraphFrame::mouseReleaseEvent(QMouseEvent)
{/*...*/}
Run Code Online (Sandbox Code Playgroud)
好吧,这完全解决了警告的问题,但现在...... mouseReleaseEvent()根本不再触发.所以这也不适合我.
那么我还有其他方法可以用代码变体来抑制警告?