2016-05-19 8 views
-1

Hat jemand so etwas versucht?Wie man den Wert in einem char [] oder einer Zeichenkette im Programm selbst drucken

Ist es möglich, den Wert einer Zeichenkette oder Ganzzahl auf dem Programm selbst zu drucken? Sagen Sie zum Beispiel - Ich habe 2 Tests für ein Programm geschrieben Ich versuche, alle Testfunktionen aufzurufen, indem ich in einer for-Schleife umschlinge.

Eine kleine Probe Beispiel

#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();" 
} 

Gibt es eine Möglichkeit, es in C zu tun?


komplettes Programm

#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

Namen von Funktionen im laufenden Betrieb nicht zur Verfügung stehen, außer für Debug-Informationen. 'for'-Schleife ist im Präprozessor nicht verfügbar. Dann ... wie wäre es mit einem Array, das Zeiger auf Funktionen enthält und es benutzt? – MikeCAT

+1

"für (int test_idx = 0; test_idx Mirakurun

+0

@Mirakurun Wie hängt das mit dem zusammen, was das OP will? – ameyCU

Antwort

1

Der Schrank Sie in C++ bekommen können, ist eine Karte von Funktionsnamen Funktionen zu halten, wie folgt:

#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

Sie können ein Array machen von Funktionszeigern und rufen Sie jede in einer Schleife auf.

Beispiel:

#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; 
} 

Ausgang:

Test 0 
Test 1 
Test 2