a***e 发帖数: 1140 | 1 用了C++一段时间了,还是没有完全弄明白。
看一个程序:
主程序:
double* obj; //只有定义。
function_sub(&obj); //调用子程序, 并把指针的地址做参量。
子程序:
static void function_sub(double **obj_p){
static double val[2]={1,2}; //为什么要static?
*obj_p=val; //让local数组返回?
}
俺不明白的是,参数 obj 只定义,没有分配内存。 当子程序调用结束时,local数组就
自动distory了,那返回的难道不是一个无效数组首地址吗? 还是因为加了static 关键
字就变成global了?
还有在这种情况子函数定义成 “static void” 有什么含义? |
|
s***k 发帖数: 2754 | 2 就是一个C函数的定义的第一行。
这个函数定义一个字符串并且传回主程序。
没有形参。
别人考我这个,不会:(
俺很怀疑有没有别的写法(*前后的空格应该不算吧,呵呵)。int *也不算。
人家说有,但我想不出来。
谁教教我?多谢! |
|
t******n 发帖数: 138 | 3 我用system命令在ANSI C主程序A中调用另一程序B,
程序B的结果是一个数值,我想把这个结果赋值给程序A中的
一个变量,应该怎么传递呢?
我以前让B把结果写在硬盘上,再在A里把它读出来,感觉很傻。
google了一下,好像是用fork(),execl(),pipe()等等.......
多谢! |
|
x*******r 发帖数: 6 | 4
================================
总共有nx*ny*nz个数,这些数放在变量arr里,变量arr在module FIELD里。我要挑出第
kk大那个数,并把这个值赋给yy.
我编译用的是:mpxlf90_r -qsuffix=f=f90 -q64 -o 。。。。。。
(虽然主程序是MPI的,但是call这个select函数只是在一个processor里,所以这部分
和串行一样) |
|
t****t 发帖数: 6806 | 5 我想不用了,你就把select.f里所有integer改成integer*8就好了.
当然,你自己的主程序里也应该有相同的类型. |
|
t****t 发帖数: 6806 | 6 我google了一下,也找到了这个程序.我没有用过power pc的CPU,但是我想可能是由于编
译器的问题,如果你的array index是32位,那产生的access也是+/-2GB的.你用integer
当index是刚好够,但是*4就不够了.如果你用64位的index,那么access应该是全部64位
的,就没问题了.
所以说你主程序里也要把index改成64位的才好. |
|
x*******r 发帖数: 6 | 7 非常感谢thrust!
我水平很低,但是大概能明白你的意思。
我是不是只需要将主程序,子程序里相关的整数由integer*4 变为integer*8,而实数
还是Real*4不用变就可以了?
integer |
|
r****t 发帖数: 10904 | 8 这个practice不好,这让module1 depends on global foo.
如果一定要用global变量, 写到一个module里面:
globalvars.py:
foo = "bar"
foo1 = "bar1"
然后在主程序里头:
import globalvars
or
from globalvars import * |
|
w***n 发帖数: 1137 | 9 看到一个程序, 里面有这么一句。
#include
#include
#include "errors.h"
typedef struct alarm_tag {
struct alarm_tag *link;
int seconds;
time_t time; /* seconds from EPOCH */
char message[64];
} alarm_t;
在主程序力有这么一句
alarm->time = time (NULL) + alarm->seconds;
以前没有见过这种用法,这句到底是什么意思? |
|
k********r 发帖数: 18 | 10 我在编一个peer-to-peer 的程序。
Computer A 收到用户输入后就broadcast 个request packet 寻求文件
。有文件的Computer B和 C都返回 response. Computer A选择并发confirm 给B,同
时打开server接受连接。B收到confirm后和A建立连接。
我要给request 和confirm设个timeout。如果request 没及时收到response,重传。否
则取消timeout; 如果A的confirm 没及时收到B的连接,A就给C发confirm让C和A建
立连接,如收到就取消timeout;
Question:
1. 如何设timeout哪?
a.select(). 可我在主程序已经把select()放在loop里接受stdio, request/response/
confirm, 好像没地方再设其他select()给request/confirm用于timeout了。
b. 用alarm(). 可alarm()无法区分是alarm谁,哪个文件的哪个reques |
|
c****y 发帖数: 24 | 11 fork()吧,子进程可以用个SIGALRM处理函数来设置个标志;子进程的结束状态可以由
wait/waitpid得到。然后父进程就在loop B/C,子进程成功返回就直接break,否则继
续loop。
我在编一个peer-to-peer 的程序。
Computer A 收到用户输入后就broadcast 个request packet 寻求文件
。有文件的Computer B和 C都返回 response. Computer A选择并发confirm 给B,同
时打开server接受连接。B收到confirm后和A建立连接。
我要给request 和confirm设个timeout。如果request 没及时收到response,重传。否
则取消timeout; 如果A的confirm 没及时收到B的连接,A就给C发confirm让C和A建
立连接,如收到就取消timeout;
Question:
1. 如何设timeout哪?
a.select(). 可我在主程序已经把select()放在loop里接受stdio, request/respon |
|
t*i 发帖数: 72 | 12 我有一个结构如下,
struct{
char *data;
.....
} Connection
在一个静态libraray里我定义了一个function如下
create_connection(){
Connection conn;
conn->data=olddata;
}
func1(Connection *conn, char * msg){
}
func2(Connection *conn, char *msg
if (conn->data =newdata) {
.......
}
}
我在住程序调用了func1如下
func1(Connection *conn, char *msg){
create_connection();
sprintf(conn->data, "%s", "newdata");
func2();
}
我发现尽管我在主程序改变了conn->data,可是似乎到func2的时候,conn->data还总是
olddata,请问这到底是啥问题呢。 |
|
t*i 发帖数: 72 | 13 呵呵==
我的意思就是,尽管我在主程序里把conn->data给改了,调用func2的时候似乎conn->
data还是没有改变,=是个问题, 我过会看看是不是这个错了。 谢谢。 |
|
b***y 发帖数: 2799 | 14 ☆─────────────────────────────────────☆
wealdg (wwwnet) 于 (Sun Feb 3 22:23:04 2008) 提到:
有一巨大的程序如下:
In the main program:
#include "A.h"
#include "B.h"
int main()
{
}
in A.cpp:
#include "C.h"
#include "D.h"
#include "E.h"
Function A1
Function A2
在类B C D E 中仍会调用很多其他的类,在监测内存泄露时,是否只是在主程序(MAIN
)中,加上
#define _CRTDBG_MAP_ALLOC
#include
#include
#include "A.h"
#include "B.h"
//#ifdef _DEBUG
//_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
//#endif
int mai |
|
h*******n 发帖数: 2052 | 15 比如我一个程序, 用Stack, Queue, Stack.h 和 Queue.h里面都#include Itemtype.h
但是Itemtype.h里面定义了一些变量, 比如
const int MAX_ITEMS = 5
enum RelationType {LESS, GREATER, EQUAL} 等等,
在主程序中#include Stack.h和Queue.h, 编译时出错, 说multiple declaration of
MAX_ITEMS还有RelationType, 这种问题怎么解决? |
|
t********s 发帖数: 4503 | 16 问个具体问题:
fortran子程序中可用变量来定义数组大小,但所对应的数组最终要在主程序中定义具
体的大小,比如100X100的二围数组。但如果生成软件给用户时,用户得到的是二进制
码,不是你的源程序,所以用户不能改变这个数组的大小。如果用户要求解一个
1000X1000的问题怎么办?C可以动态分配数组大小,所以用户可输入所要求解的问题大
小给一个变量,程序运行时可自动分配到所需空间。Fortran怎么办? |
|
b***y 发帖数: 2799 | 17 ☆─────────────────────────────────────☆
qr (非凡公子) 于 (Fri Apr 11 18:03:21 2008) 提到:
我想在一个class的constructor里面初始化某些数据,希望这些数据类型可以是float
或者double的,现在的问题是如果我把constructor写在xxx.h文件中,程序不报错。但
是如果单独写在xxx.cpp中,然后include xxx.h中的declartion,在主程序中再调用这
个xxx.h然后定义该class的一个实例,编程器总是报告link错误,说这个constrctor函
数是unresolved external symbol。如果把程序改成正常的class就没有这个问题,百
思不得其解,请高手赐教。
☆─────────────────────────────────────☆
jobseek (seeking+jobs) 于 (Fri Apr 11 18:23:00 2008) 提到:
这是template的毛病,
得把declaration and definit |
|
b***y 发帖数: 2799 | 18 ☆─────────────────────────────────────☆
nochoice (别无选择) 于 (Tue Sep 20 21:56:36 2005) 提到:
我有一个小问题(对各位高手来说)。
我声明一个类
class a{
int **b;
void do()
{
b[0][0].....;
}
...
}
我想这样用,好像不行
void main()
{
int b[2][3]={.....};
a *test=new a;
test->b=b;
test->do();
}
我想主程序里面声明一个多维数组(不定大小的),然后用对象里面的指针指向这个多维数
组引用,这样省了构造函数再分配空间.
有没有什么好办法实现?
☆─────────────────────────────────────☆
oOOo (\_/o!o\_/) 于 (Tue Sep 20 22:41:12 2005) 提到:
first, int**b should be public
a |
|
s******h 发帖数: 54 | 19 如果不用这个contains的话,主程序内部定义的函数或者子程序就不能调用了么?? |
|
v**i 发帖数: 50 | 20 本人用fortran时间不长,遇到下面的问题,花了很多时间看书也没搞明白。
下面的Function, 名字是 ix
real Function ix(x)
real x
ix=1.0+x
end
然后在主程序里调用,比如
print *, ix(0.3)
结果是 4599856, 而不是1.3
如果把所有的名字ix换成 bx,结果就对了。是不是fortran的函数不能以字母i开头啊
?谢谢解答 |
|
d*e 发帖数: 109 | 21 【 以下文字转载自 CS 讨论区 】
发信人: die (Die), 信区: CS
标 题: 【求助】Fortran多线程执行效率问题
发信站: BBS 未名空间站 (Tue Aug 11 08:55:06 2009, 美东)
请教为何多线程执行起来花费时间比单线程要多呢?
非常感谢~
问题如下:
函数是用MONT CARLO方法计算圆周率。单线程计算函数两次共耗费大约是97;而两个线
程分别计算函数一次耗费的时间是392.
环境:
CPU: i7920 4核
操作系统:Windows Vista
编译器:Fortran 90
程序如下:
多线程主程序:
Program TESTPROC0
use ifqwin
use dfmt
use threadfunction
implicit none
integer,parameter::n_thread=2,n_c=2
integer(INT_PTR_KIND())::Threads_Handle(n_thread),waitresult,cend,retlog,
retint,&
thread_ |
|
v**i 发帖数: 50 | 22 设有一个double precision function, 比如下面的
function b(x)
double precision x,b
b=dlog(x)
end
然后在主程序里面调用,
如果输入
x=2.0_8
y=b(x)
print ("(f30.20)"),y
结果就是准确的,
如果输入
x=2.0_8
print ("(f30.20)"), b(x)
显示结果的精度不够,为什么呢? 谢谢解答, |
|
l***e 发帖数: 480 | 23 有一文件存有大量对象记录,前面问过。
每行一个记录,记录有两种:
一种是两个string和两个int,中间是'\t';串中有空格。
另一种是开头一个固定字符串以'?'结尾,然后是两个串,和一个int,中间也是'\t';
记录/行之间有空行。
我要定义这个对象的extractor(>>)
我的问题是,空行在哪里处理?
如果在对象>>函数里处理,那就要产生空对象返回。
如果在对象>>函数外处理,主程序先从文件里读一行,判断是否空行,是,跳过;不是
,送给对象,这时传的就是string了,而不是输入流了。
所以请教大家,集思广益。 |
|
C******e 发帖数: 1850 | 24 请教大侠们一个文件IO的问题,我有一段程序要读出一个文件里的数据进行处理,但由
于文件很长,
所以想用一个CALLBACK函数专门来分批的读文件,每次读一段。主程序处理完了现有的
数据,就让
CALLBACK去读下一块。思想如下:
int callback(int **databuf, void* userdata)
{
state = userdata;
fseek(state->fp, OFFSET, 0);
r = fread();
return r;
}
main()
{
declare userdata;
userdata.fp = fopen("file","r");
datastruct = function1(par1, par2, ..., &callback);
for(;;)
dataprocess(datastruct);
fclose(userdata.fp);
}
但是好像不对,一运行就死了,请大侠指正。多谢了。 |
|
i*****t 发帖数: 636 | 25 举个简单例子,比如一个function有两个输入,第一个是整数数组,第二个是数组的si
ze,在主程序中调用时数组大小跟数组是一致的,比如
int arr[5] = {1, 2, 3, 4, 5};
func(arr, 5);
但如果不一致,比如上述例子中第二个输入为10,那么怎么在func中check呢?如果无法
check的话应该怎么处理呢?thanks |
|
l******t 发帖数: 12659 | 26 向大家请教一个问题:
1. 编译文件: g++ -o exec prog.cpp
2. 重定向: exec < folder > output
目的是打算从folder里面寻找所需要的文件,然后处理后,将结果保存到output
请问,我在主程序中,如何得到folder的名字;里面的文件等信息啊?
多谢了! |
|