在编译C++源代码时,我收到了后续警告。
变量‘tab’集但未使用-未使用-但-设置-变量
我有一个代码片段:编译显示上面提到的警告,请建议我为什么编译显示警告。当我运行程序时,我得到:分段错误(内核转储)
EX.1
const int n = 10000;
int main() {
char tab[n][n];
for(int x = 0; x < n; x++)
for(int y = 0; y < n; y++)
tab[x][y] = x + y;
但如果我使用全局变量,我的程序运行良好。
EX.2
const
我发现gcc中不同的编译器优化级别在访问循环中的局部变量或全局变量时给出了非常不同的结果。这让我感到惊讶的原因是,如果访问一种类型的变量比访问另一种变量更容易优化,我认为gcc优化会利用这一事实。这里有两个例子(在C++中,但它们的C对应项给出的时间实际上是相同的):
global = 0;
for (int i = 0; i < SIZE; i++)
global++;
,它使用全局变量long global,相对于
long tmp = 0;
for (int i = 0; i < SIZE; i++)
tmp++
文件a.c
int a[10] = {1, 2, 3, 4, 5, 6, 7, 9, 10};
int *b = a;
文件b.c版本一
extern int a[];
extern int b[];
a[2] = 1; //works well
b[2] = 1; //works well
文件b.c版本二
extern int *a;
extern int b[];
a[2] = 1; // segfault
b[2] = 1; // works well
extern int b[]匹配int *b,而extern int a[]匹配int a[10],为什么int[]同时匹配int *
我通过示例来理解它是如何异步运行python的。我阅读了Trio文档,我认为每次在循环中只能执行一个任务,并且在每个checkpoint中,scheduler决定将执行哪个任务。
我做了一个例子来测试它,在三个例子中,我没有使用我在nursery中产生的孩子中的任何检查点,但这个例子比同步版本快两倍。
异步示例:
import time
import trio
results = []
async def sum_numbers(first, last):
result = 0
for i in range(first, last):
result += i
令人惊讶的是,在编译C时,我发现gcc可以发现这个错误。我简化了仍然会触发警告的代码。我发布这个问题是为了弄清楚它所使用的技术的细节。下面是我的文件a.c的代码
int main(){
int a[1]={0};
return(a[1]);
}
我的gcc版本是gcc (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3。使用gcc a.c -Wall时不会出现警告;使用gcc -O1 a.c -Wall时会出现警告:
warning: ‘a[1]’ is used uninitialized in this function [-Wuninitialized]
在
GCC似乎在lambda函数中通过引用捕获全局变量是错误的,即使它们被指定为“按值捕获”。这段代码将编译并打印"a = 9":
#include <iostream>
int a = 10;
int main()
{
[=]() { a = 9; } ();
std::cout << "a = " << a << std::endl;
return 0;
}
虽然这段代码不会编译:
#include <iostream>
int main()
{
int a = 1
我使用的是gcc 4.9.0,我希望看到编译器警告我超出了数组界限。如果我编译这段代码
int main()
{
int table[5]={0};
table[8] = 1234;
int x = table[10];
}
使用g++ -O2 -Wall main.cpp -o main.exe时,我只收到有关未使用的x的警告:
main.cpp: In function 'int main()':
main.cpp:8:7: warning: unused variable 'x' [-Wunused-variable]
int x
当我用Clang (-O3)或MSVC (/O2)编译和运行这段代码时.
#include <stdio.h>
#include <time.h>
static int const N = 0x8000;
int main()
{
clock_t const start = clock();
for (int i = 0; i < N; ++i)
{
int a[N]; // Never used outside of this block, but not optimized away
for (
如果一个C++类成员函数访问一个包含定义重载的变量名,定义既作为类的成员变量,又作为成员函数定义的全局范围中的变量,那么成员函数将实际访问哪个变量?情况如下:
某某阶层:
class SomeClass
{
int Num;
void OperateOnNum();
};
SomeClass.cpp:
#include "SomeClass.h"
int Num;
void SomeClass::OperateOnNum()
{
Num = 0;
}
OperateOnNum将对哪一个名词进行手术?Microsoft Visual Stu
考虑这两个文件:
//main1.cpp
int main()
{
int a = 0;
int &b = a;
}
//main2.cpp
int main()
{
int a = 0;
int *b = &a;
}
当我用gcc -S选项编译它并比较2个汇编程序输出时,它们的输出完全相同。那么,为什么有些书说参考变量不使用额外的内存呢?
为什么谷歌的V8 JavaScript引擎在我的C++插件中的工作速度比Node.JS慢得多?
我试图编写一些愚蠢的简单代码,用于在JavaScript中生成素数,并通过我的C++插件在V8中运行它,并直接在Node.JS中运行。
我感到非常震惊,因为两者都应该使用相同的JavaScript引擎,并且都执行了相同的代码(时间以毫秒为单位,越少越好):
V8 in Node.JS: 495517
V8 in Node.JS C++ Addon: 623598
下面是运行相同的JavaScript代码的C++模块和C++插件的源代码(我认为问题不在互操作中,因为时间测量直接在JS中工作):
i