你不可以在 des.h 裏宣告 static 變數.
如果你在 .c 寫 static 變數, 使用範圍就只在那個 .c 裏.
如果你在 .h 寫 static 變數, 使用範圍就在 "個別" 有 include 它的 .c 裏.
你有幾個 .c 有 include 這個 des.h, 那就有幾個 keyc 和 key.
所以, 你這樣寫, 變成每個 .c 都有 "屬於自己" 的 keyc 和 key
所以, 你在使用時, 每個 function 使用的 keyc key 不是一樣的.
我建議你這麼用:
這樣可以讓所有的 function 存取同一份 keyc 和 key
-----
des.h
-----
:
:
extern char keyc[16];
extern int key[64];
:
--------
main.cpp
--------
:
:
char keyc[16];
int key[64];
:
--------
main.cpp
--------
:
:
char keyc[16];
int key[64];
main()
{
:
:
:
}
不過, 我看你的程式, 根本就不須要傳 keyc 給 keyto64 啊......
還有, 在 c++ 中少用 static 或 global 變數,
這是不怎麼好的習摜, 最好都用參數來傳,
==> 在 susubon.bbs@Super.Dorm-F2.NCTU.Edu.Tw (......) 的文章中提到:
: 我第一次用make來寫一個程式,但是遇到以下的問題,麻請不吝指教,謝謝!
: keyto64()這個function放在keyto64.c內
: 而所用的key[64];
: 在des.h宣告為 static int key[64];
: 問題是當我在main.c中的 main function call keyto64,所印出的
: key[64]內容是對的
: 但是在main function內,call完keyto64,馬上再印出key[64],值就完
: 全不對了....,不知道為何有這樣的情況發生!
: ps.在所有的 .cpp檔都會#include "des.h"
: 以下是程式較詳細的內容
: ------
: des.h
: ------
: #include <iostream.h>
: #include <string.h>
: #include <stdio.h>
: static char keyc[16]; //最初所讀入的key
: static int key[64]; //將key轉成64bit
: .....
: -----------
: keyto64.cpp
: -----------
: include "des.h"
: void keyto64(char *keyc){
: int i,j;
: cout<<"in keyto64 16\n";
: for(i=0;i<16;i++){
: cout<<"round="<<i<<" ";
: onectofourb(keyc[i]);
: for(j=0;j<4;j++){
: key[4*i+j]=Binary[j];
: cout<<Binary[j];
: }
: cout<<endl;
: }
: cout<<"in keyto64 ,key="
: for(int i=0;i<64;i++)
: cout<<key[i];
: }
: --------
: main.cpp
: --------
: #include "des.h"
: void main(int argc,char *argv[]){
: ......
: keyto64(keyc);
: cout<<"after keyto64 key=";
: for(int i=0;i<64;i++)
: cout<<key[i];
: }
: 謝謝
--
奶奶: "哇, 你們看, 你們看, 電視裏面那些怪獸好可怕啊......"
弟弟: "阿媽, 不是啦, 那些是恐龍, 可是都是假的啦 :) "
奶奶: "阿那是假的, 那些人為什麼要跑? 還跑得那麼喘! "
弟弟: ......@#$%...... (和民國前的人溝通真是困難......)