2016-05-19 10 views
-1

誰かがこれを試したことがありますか?char []に格納されている値やプログラム自体の文字列を印刷するには

文字列または整数の値をプログラム自体に出力することはできますか?たとえば、forループでループすることによってすべてのテスト関数を呼び出すプログラムの2つのテストを書いています。

小さなサンプル例

#define MAX_TESTS 10 


for(test_idx = 0; test_idx<MAX_TESTS; ++test_idx) 
{ 
    test_##test_idx(); 

    //Here the output will be more like "test_test_idx();" 
    //But I am looking for something like 
    //"test_0();" 
    //"test_1();" 
    //"test_2();" 
    . 
    . 
    . 
    //"test_9();" 
} 

Cでそれを行うための方法はありますか?


完全なプログラム

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

//Macros 
#define MAX_TEST 2 
#define _MYCAT(a,b) a##b() 

void test_0() 
{ 
    printf("Test 0\n"); 
} 

void test_1() 
{ 
    printf("Test 1 \n"); 
} 

int main() 
{ 
    printf("Max Product Testing \n"); 

    for (int test_idx=0; test_idx<MAX_TEST; ++test_idx) 
    { 
     /* Try - 1 
     char buffer[50]; 
     int n = sprintf(buffer, "test_%d", test_idx); 
     printf("%s %d \n", buffer, n); 
    */ 

    //Try - 2 
    //_MYCAT(test_, test_idx); 
    } 
    return 0; 
    } 
+2

名前はデバッグ情報を除いて、実行時には使用できません。 'for'ループはプリプロセッサでは利用できません。それでは...関数へのポインタを含む配列を作成して使用するのはどうですか? – MikeCAT

+1

"for(int test_idx = 0; test_idx Mirakurun

+0

@Mirakurun OPは何を望んでいるのですか? – ameyCU

答えて

1

あなたはC++に取得することができますクローゼットは、次のように関数に関数名のマップを維持することです:

#include <iostream> 
#include <unordered_map> 
#include <string> 
#include <functional> 
using namespace std; 

void test_0() 
{ 
    printf("Test 0\n"); 
} 

void test_1() 
{ 
    printf("Test 1 \n"); 
} 

int main() { 
    unordered_map<string, function<void()>> func_map; 
    func_map["test_0"] = test_0; 
    func_map["test_1"] = test_1; 

    for(int i = 0; i < 2; ++i) { 
     func_map.at("test_" + to_string(i))(); 
    } 

    return 0; 
} 
0

あなたは、配列を作ることができますそれぞれの関数ポインタをループ内で呼び出すことができます。

例:

#include <stdio.h> 

void test_0() 
{ 
    printf("Test 0\n"); 
} 

void test_1() 
{ 
    printf("Test 1\n"); 
} 

void test_2() 
{ 
    printf("Test 2\n"); 
} 

int main() 
{ 
    void(*a)() = test_0; 
    void(*b)() = test_1; 
    void(*c)() = test_2; 

    const int SIZE = 3; 
    void(*arr[SIZE])() = { 
     { a }, { b }, { c } 
    }; 

    for (int i = 0; i < SIZE; ++i) { 
     arr[i](); 
    } 

    return 0; 
} 

出力:機能の

Test 0 
Test 1 
Test 2 
関連する問題