Форум программистов, компьютерный форум CyberForum.ru

Почему без "статик" не работает? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Написать рекурсивную функцию вычисления НОД http://www.cyberforum.ru/cpp-beginners/thread711558.html
подскажите, пожалуйста, как написать рекурсивную функцию вычисления НОД, используя алгоритм Эвклида: НОД (a, b) = НОД (b, a%b). в с++???
C++ Зачем здесь нужен static Дело в том что без него (без static) программка не работает корректно. http://www.cyberforum.ru/cpp-beginners/thread711556.html
Выведение одинаковых элементов массива на экран C++
Есть такая прога. #include <vcl.h> #include <iostream.h> #include <conio.h> int main () { int mas1; int mas2; int i; for (i=0; i<5; i++) {
C++ Прокомментируйте программу (программа внутри)
Пожалуйста помогите прокомментить. Для чего нужны вектора ,хоть немного.... #include <iostream> #include <iomanip> #include <fstream> #include <vector> #include <cmath> #include <cassert> #include <algorithm> using namespace std;
C++ Функции. Напечатать на экране все те числа, которые принадлежат этому интервалу... http://www.cyberforum.ru/cpp-beginners/thread711525.html
Дан интервал натуральных чисел . Напечатать на экране все те числа, которые принадлежат этому интервалу и которые можно выразить как сумму квадратов двух натуральных чисел (используя функцию, которая знает квадраты целых чисел)
C++ Оптимизировать перебор Неделю учу С++, так что прошу не гадить. Надо уменьшить время работы. Задача: Вступление — Брат мой, Магистр Ордена хочет узнать завтра о результатах наших многолетних изысканий. Он хочет видеть, ни много, ни мало, Суммирующую Машину! Даже более того: он хочет, чтобы наша Машина — всего лишь машина — продемонстрировала свое постижение Таинства Суммы настолько глубоко, насколько это возможно.... подробнее

Показать сообщение отдельно
Refery
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 16
28.11.2012, 00:14     Почему без "статик" не работает?
Дело в том что без него (без static) программка не работает корректно.
по задумке (а оно так и выходит) в открывающемся окошке фоновый цвет задаваемый с помощью функции библиотеки OpenGL glClear(GL_COLOR_BUFFER_BIT); должен плавно меняться с черного на красный-оранжевый-желтый-белый...
так и происходит, но если убрать "static" и объявить переменную
C++
1
unsigned long color = 0;
а не
C++
1
static unsigned long color = 0;
то код работать не будет. т.е. программка конечно скомпелируется и запустится, но фон будет постоянно черным.
на сколько я знаю static используется для скрытия глобальных переменных от видимости их другими срр файлами...
так что логику использования здесь static я абсолютно не вижу =(

вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <glut.h>
#include <glaux.h>
#include <Windows.h>
#include <math.h>
#include <stdlib.h> 
#include <iostream>
 
GLfloat colors1[]={0.9f,0.5f,0.1f};             
BOOL colorUp[]={TRUE,TRUE,TRUE};
 
void init(void)
{
    glClearColor(0.0,0.0,0.0,0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0,1.0,0.0,1.0,-1.0,1.0);
}
 
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    static unsigned long color = 0;
    if( ++color >= 0x00ffffff ) color = 0;  
    if( color >= 0xff ) color |= 0xff;
    if( color >= 0xffff ) color |= 0xffff;
    const unsigned char * rgba = (const unsigned char *)&color;
    printf( "red=%u green=%u blue=%u\n", rgba[0], rgba[1], rgba[2] );
    glClearColor( rgba[0] / 255.0f, rgba[1] / 255.0f, rgba[2] / 255.0f, 1 );
    glutSwapBuffers();
    glutPostRedisplay();
}
 
int main(int argc, char **argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
    glutInitWindowSize(250,250);
    glutInitWindowPosition(100,100);
    glutCreateWindow("color changing");
    init();
    glutDisplayFunc(display);
    glutMainLoop();
    srand( GetTickCount() );
    return 0;
}
P.S. возможно тут лишние заголовки, но негативно ни на что это не должно повлиять.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru