我在computer.h 中有一個名為“status”的資料成員,我計算了computer.c 中的值。我想訪問這個確切的值并將它列印在一個名為 display.c 的不同檔案中。
問題是我不確定如何訪問該變數。我不允許更改 display_status() 的引數,并且我假設創建一個新的 computer_data 結構來訪問該函式中的狀態成員只會創建一個新的區域變數并且不起作用。
我不確定如何訪問 display.c 中的 computer_data->status 的值,并希望得到任何幫助。我會專門為狀態創建一個 getter 函式嗎?
電腦.h
struct computer_data {
struct param *status;
}
電腦.c
static void computer_assign_status(){
struct computer_data *computer = computer_get_data();
computer->status = calculateStat();
}
顯示.c
#include "computer.h"
void display_status(){
struct computer_data *computer = computer_get_data();
printf("computer->status: %d /n", computer->status);
}
注意:作為函式的 computer_get_data() 也被定義為“struct computer_data *computer_get_data()”
uj5u.com熱心網友回復:
使用 get 函式是一個好的開始。你只需要在另一個檔案中讓它為人所知。
在computer.h添加的宣告:
struct computer_data {
struct param *status;
}
struct computer_data *computer_get_data(void);
然后就可以在display.c.
但是,當然對于列印,status您不能使用%d格式說明符,因為它是指向結構的指標。
同樣在computer.c你有一個錯誤:
struct void computer_assign_status(){
那應該只是void作為回傳型別。
我會專門為狀態創建一個 getter 函式嗎?
這完全取決于您的需求。如果您想對呼叫者隱藏該結構中可能存在的所有其他內容,那么您可以提供一個僅回傳指向狀態部分的指標的函式。否則,您可以像現在一樣回傳指向整個資料結構的指標。
uj5u.com熱心網友回復:
您的示例均未訪問在另一個編譯單元中定義的任何資料。順便說一句,你的例子寫得很草率:作為一個例子struct void。在這里提問時多花點力氣
您只能訪問在其他編譯單元中定義的全域(更準確地說是帶有外部鏈接的靜態存盤)變數。
在計算機.h
struct computer_data {
struct param *status;
}
extern struct computer_data computer;
在計算機.c
#include "computer.h"
struct computer_data computer;
void computer_assign_status(void)
{
computer.status = calculateStat();
}
在 display.c
#include "computer.h"
void display_status()
{
printf("computer->status: %d /n", computer.status);
}
uj5u.com熱心網友回復:
在display.c做:
extern struct computer_data * computer = computer_get_data()
反而。
這是有效的,因為使用extern關鍵字,您正在使用的編譯器將被迫在外部檔案中查找變數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/362172.html
