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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Incs
1 / 1 / 0
Регистрация: 31.07.2012
Сообщений: 19
#1

Void - C++

05.08.2012, 00:13. Просмотров 878. Ответов 17
Метки нет (Все метки)

Всем привет, форумчане такой к вам вопрос, как передать параметры в такую функцию:
C++
1
2
3
int main(void){
...
}
И можно ли поменять main например на funk1(void), но void должен присутствовать обязательно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.08.2012, 00:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Void (C++):

Дважды вычислить значение выражения, используя функции возвращающие void и не void - C++
Хай!Помогите решить Дважды вычислить значение выражения, используя функции возвращающие void и не void....

Typedef void (WINAPI *GLEND)(void), как вызывать? - C++
импортирую метод GLEND glmethod = (GLEND) GetProcAddress(hModule, "glEnd"); как его теперь коректно вызвать: typedef void...

Что значит void(*f)()=(void(*)()func? - C++
void(*f)()=(void(*)())func; Объясните, пожалуйста, что значит этот код.

delete или new (typeid(void*))(void*) - C++
Доброе время суток. Пишу список. Телом каждого элемента (el) списка является void указатель(body). (предполагается что тело элемента...

Error C2084: функция "void mehanizm:print(void)" уже имеет текст реализации - C++
Добрый день, я столкнулся с проблемой вывода элемента на экран, выбивает: "error C2084: функция "void mehanizm::print(void)" уже имеет...

LNK2019: ссылка на неразрешенный внешний символ "void __cdecl run(void)" (?run@@YAXXZ) в функции _wmain - C++
#include "stdafx.h" #include "iostream" #include "cmath" using namespace std; class A { private : double *x; double...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alkagolik
Заблокирован
05.08.2012, 00:23 #2
Цитата Сообщение от Incs Посмотреть сообщение
Всем привет, форумчане такой к вам вопрос, как передать параметры в такую функцию
точно в такую никак. void. передать параметры в функцию main можно из командной оболочки.
C
1
2
3
4
5
6
7
8
#include <stdio.h>
 
int main ( int argc, char** argv ) {
 
    fprintf( stdout, "параметров  = %i  аргумент: %s\n", argc, argv[ 1 ] );
    
    return 0;
}
Bash
1
2
3
pc-host#./test argument
параметров  = 2  аргумент: argument
pc-host#
Incs
1 / 1 / 0
Регистрация: 31.07.2012
Сообщений: 19
05.08.2012, 00:34  [ТС] #3
Цитата Сообщение от alkagolik Посмотреть сообщение
точно в такую никак.
Да я понял, на вики читал про это, но все таки думал как-то можно. А если такая структура к примеру у программы:
C++
1
2
3
4
5
void funk() {
}
 
int main(void){
}
В таком случае есть ли вариант избавления от этого несчастного void?
alkagolik
Заблокирован
05.08.2012, 00:41 #4
Цитата Сообщение от Incs Посмотреть сообщение
В таком случае есть ли вариант избавления от этого несчастного void?
ну foo( void ) эквивалентно foo(). а void foo() говорит о том что функция ничего не возвращает. А что подразумевается под "можно ли избавиться" я не понял.
Incs
1 / 1 / 0
Регистрация: 31.07.2012
Сообщений: 19
05.08.2012, 00:47  [ТС] #5
Цитата Сообщение от alkagolik Посмотреть сообщение
ну foo( void ) эквивалентно foo(). а void foo() говорит о том что функция ничего не возвращает. А что подразумевается под "можно ли избавиться" я не понял.
Если конкретно, то выглядит все это так:
C++
1
2
3
4
5
__global__ void funk() {
}
 
int main(void){
}
alkagolik
Заблокирован
05.08.2012, 00:50 #6
http://code.google.com/p/stanford-cs...rialHelloWorld
Incs
1 / 1 / 0
Регистрация: 31.07.2012
Сообщений: 19
05.08.2012, 01:24  [ТС] #7
Цитата Сообщение от alkagolik Посмотреть сообщение
Спасибо вам, они-то молодцы, все так просто и легко если рассматривать их примеры, а как только начинаешь ударяться казалось бы в такие банальные вещи как передача параметров сразу садишься в лужу. Еще и форум отключен у них, ладно пойду дальше гуглить.
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
05.08.2012, 01:28 #8
Цитата Сообщение от Incs Посмотреть сообщение
Да я понял, на вики читал про это, но все таки думал как-то можно. А если такая структура к примеру у программы:
можно через глобальные переменные
C++
1
2
3
4
5
6
7
8
9
10
11
int i;
void fnk()
{
 i*=i;
}
int main()
{
i=2;
 fnk();
printf("%d",i);
}
А Зачем????
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.08.2012, 01:43 #9
Цитата Сообщение от alkagolik Посмотреть сообщение
ну foo( void ) эквивалентно foo()
в С++, но не в Си
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
void foo(void)
{
   printf("%s", "foo\n");
}
 
void bar()
{
   printf("%s", "bar\n");
}
 
int main(void)
{
   bar(1,2,3,100500); //Ok
   foo(1,2,3,100500); //Compilation finished with errors
   return 0;
}
http://liveworkspace.org/code/edfeab...04af301026d652
Incs
1 / 1 / 0
Регистрация: 31.07.2012
Сообщений: 19
05.08.2012, 02:12  [ТС] #10
Мне вообще нужно сделать так:
C++
1
2
3
4
5
6
7
8
9
__global__ funk_for_gpu(....) {
 
}
 
int myfunk(int a1, int a2, int a3){
...
funk_for_gpu<<<1,1>>>(....);
...
}
Но такой вариант не прокатывает, т.е. если убрать этот злополучный void, компилятор не понимает где код для видяхи я так понимаю, в данной ситуации void работает на подобие указателя что ли... Просто это как бы это один из скриптов для большого проекта, а т.к. проект не вариант переписывать весь под cuda, да и нереально уже пожалуй - нужно найти выход из ситуации... Народ, если есть какие-то мысли, пишите пожалуйста, я попробую скомпилять, хотя наверное я уже все комбинации попробовал короче беда.
alkagolik
Заблокирован
05.08.2012, 04:51 #11
Jupiter, да, я долго думал уместно ли будет сказать "эквивалентно" и решил что "с пивом пойдет".
Incs, смотри например такой код компилируется без проблем
C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
foo( const char* arg ){
    fprintf( stdout, "%s\n", arg );
}
 
main ( int argc, char** argv ) {
 
    foo( argv[ 1 ] );
}
Можешь пояснить чем вызвана необходимость подмены типа?
Incs
1 / 1 / 0
Регистрация: 31.07.2012
Сообщений: 19
05.08.2012, 10:32  [ТС] #12
Цитата Сообщение от alkagolik Посмотреть сообщение
Можешь пояснить чем вызвана необходимость подмены типа?
Проще говоря, предположим, что есть несколько файлов:
inc.h
C++
1
2
#include calc.cpp
#include res.cpp
calc.cpp
C++
1
2
3
4
int calc(int a, bool b){
...
return calc;
}
res.cpp
C++
1
2
3
4
int res(int v1, int v2){
...
return res;
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
#include inc.h
 
int main(int argc, char* argv[]){
int value1;
int value2;
int par1 = calc(value 1; true);
int par2 = calc(value 2; false);
int result = res(par1, par2);
cout << "res = " << result << endl;
Так вот, на cuda будет файл res.cpp->res.cu, отсюда вопрос как в него что-то передать, если у него структура такая:
C++
1
2
3
4
5
__global__ void funk() {
}
 
int main(void){
}
p.s. код конечно грубовато накидал, но смысл приблизительно такой.
alkagolik
Заблокирован
05.08.2012, 14:59 #13
Цитата Сообщение от Incs Посмотреть сообщение
вопрос как в него что-то передать, если у него структура такая
кого в кого надо передать? Если надо передать аругменты в функцию
C
1
2
__global__ void foo() {
}
то ее надо переписать так
C
1
2
__global__ void foo( /*args*/ ) {
}
и все вызовы соответственно тоже.
Incs
1 / 1 / 0
Регистрация: 31.07.2012
Сообщений: 19
07.08.2012, 00:00  [ТС] #14
Цитата Сообщение от alkagolik Посмотреть сообщение
кого в кого надо передать? Если надо передать аругменты в функцию
C
1
2
__global__ void foo() {
}
то ее надо переписать так
C
1
2
__global__ void foo( /*args*/ ) {
}
и все вызовы соответственно тоже.

Если бы все было так просто, я например не могу понять вообще зачем там этот void. Ты немного не понимаешь как все работет, смотри

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//код который выполняется на девайсе(гпу), переменные определяются в main, тут только расчеты.
__global__ void gpu_funk(int a, int b, int *c) {
 
}
 
//тут определяем непосредственно переменные 
int main(void){
int a, b;
int *c_for_gpu;
    
//это так называемое ядро, отсюда передается инфа в gpu_funk(на девайс)
gpu_funk<<<1,1>>>(a, b, c_for_gpu);
...
}
Т.е. мне нужно банально убрать этот void, что бы вместо него поставить туда 2 параметра. Но как только я этот void убираю код не компилится.Передать нужно в main, т.е. все операции с присвоением выделением памяти и т.д. делаются в main.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
07.08.2012, 00:40 #15
Цитата Сообщение от Incs Посмотреть сообщение
Если бы все было так просто, я например не могу понять вообще зачем там этот void
Цитата Сообщение от Incs Посмотреть сообщение
Ты немного не понимаешь как все работет, смотри
так кто не понимает - ты, или он?

Цитата Сообщение от Incs Посмотреть сообщение
смотри
и, что это за кусок псевдокода?
откуда это?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2012, 00:40
Привет! Вот еще темы с ответами:

не получается передать массив из "void Vvod" в "void CalculatingEstimates" - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; void CalculatingEstimates(int Pp,Stydent mas); void Vvod(); struct...

в чем разница между void f(int &n) и void f(int &&n) - C++
:help:

void - C++
Объясните пожалуйста как работает спецификатор тип void в функии когда он употребляется вкачестве имени типа... Добавлено через 1...

void - C++
#include &lt;cstdlib&gt; #include &lt;iostream&gt; //using namespace std; void main(void) { char alphabet; //33 буквы плюс NULL NULL...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.08.2012, 00:40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru