查看完整版本: 詢問要如何修改.h檔中定義好的exter的值
頁: [1]

luckbook222 發表於 2016-8-21 10:24 PM

詢問要如何修改.h檔中定義好的exter的值

我想想詢問要如何修改.h檔中定義好的exter的值
a.h
extern a=10//等待被修改的值

a.c
#include <stdio.h>
#include "a.h"
int main(){
int value,i;

print("max=%d\n",a);
scanf("%d",&value);
if(value>a){
print("you key in %d >%d\n",value,a);
a=value;//如果這次輸入20,那我希望可以取代掉原先定義在a.h中的a值,在下次執行的時候可以讓a=20
}

}       

相詢問該怎麼寫
感謝你們
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

inunu 發表於 2016-8-22 04:09 AM

extern 的作用是宣告
告訴 C compiler 說我有這個變數, 等會再補上定義
一般用法是例如 extern int a; 就好

初始值是定義的時候設定的
例如你有一個 global.c 裡面寫
int a = 10;

程式每次執行之間本身沒有任何關聯
如果你想保留某個數值或資料
最簡單的作法是結束前寫入檔案, 剛開始時讀檔案

luckbook222 發表於 2016-8-22 02:09 PM

應該這樣說
我現在遇到的問題是
第一隻程式是一直執行的一支主程式
內容簡化後如下
#define CYCLE_TIME=125
int cycle_start=0;
while(1){
cycle_start += CYCLE_TIME;
...還有一些中斷程式
}

第二隻程式是當有遇到某些情況
想要修改CYCLE_TIME來因應情況
兩隻程式是一直在執行的
程式簡化如下

if(a>10)CYCLE_TIME=100
else if(a>20)CYCLE_TIME=200
可是目前遇到的問題是
不知道要如何將這個修改後的CYCLE_TIME傳回原先的程式

希望可以幫忙解惑
感恩...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

inunu 發表於 2016-8-23 04:47 AM

本帖最後由 inunu 於 2016-8-23 04:47 AM 編輯

你現在的條件是兩個獨立的程序互相傳遞資料
這屬於作業系統的程序管理和通訊設計實作
例如 Linux 裡用 shared memory
透過 shmat() 獲得一個 pointer, 指到共用的記憶體空間
(一般各程序都是用自己獨立的空間, 不會互相干擾)
然後從共用空間來修改參數數值
你也可以用 named pipe, 檔案, 網路通訊等方式去做

底下例子不加參數執行會一直循迴等待
加數字參數執行則會改變等待的秒數


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>

int main(int argc, char *argv[])
{
    int shmID;
    char *shmData;

    // Get shared memory
    shmID = shmget(987654321, sizeof(char), 0644 | IPC_CREAT);
    shmData = shmat(shmID, NULL, 0);

    if (argc < 2)
    {
        // Initialize
        *shmData = 2;

        while (*shmData > 0)
        {
            print f("Sleep for %d seconds.\n", *shmData);
            sleep(*shmData);
        }
    }
    else
    {
        *shmData = (char)atoi(argv);
        print f("Set sleep time to %d\n", *shmData);
    }

    return 0;
}


...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>
頁: [1]